// export def_base_level , def_amount_of_people , def_skill_level , def_starting_resources , def_shipments_density , def_shared_vision , def_people_respawning ; export is_depot , number_of_breastworks , number_of_people , skill_level , starting_crates , starting_resources , shipments_density , morale_decreasing_time , amount_of_apemen , amount_of_siberit , respawning_time_min , respawning_time_max , BetaAI , RussianAI , DifficultyC , def_beta_ai , def_russian_ai , def_difficulty ; export Side_Teams , Teams ; export Side_Positions , Side_Nations , Team_Game ; export Position_Sides ; export depot_def , breastworks_def , start_def , normal_oil_deposits_locations , extra_oil_deposits_locations , normal_sib_deposits_locations , extra_sib_deposits_locations , battle_flags_id , def_siberite_bomb , siberite_bomb ; var commander ; var global_units , global_defined , soldiers_created ; var neng , nsci , nmech , nsol ; function read_multiplayer_and_game_parameters ; var i ; begin
   0: LD_INT 0
   2: PPUSH
   3: PPUSH
// if Multiplayer then
   4: LD_OWVAR 4
   8: IFFALSE 62
// begin Your_Side := mp_player_side ;
  10: LD_ADDR_OWVAR 2
  14: PUSH
  15: LD_OWVAR 7
  19: ST_TO_ADDR
// Side_Positions := mp_sides_positions ;
  20: LD_ADDR_EXP 28
  24: PUSH
  25: LD_OWVAR 17
  29: ST_TO_ADDR
// Side_Teams := mp_sides_teams ;
  30: LD_ADDR_EXP 26
  34: PUSH
  35: LD_OWVAR 15
  39: ST_TO_ADDR
// Side_Nations := mp_sides_nations ;
  40: LD_ADDR_EXP 29
  44: PUSH
  45: LD_OWVAR 16
  49: ST_TO_ADDR
// Teams := mp_teams ;
  50: LD_ADDR_EXP 27
  54: PUSH
  55: LD_OWVAR 12
  59: ST_TO_ADDR
// end else
  60: GO 236
// begin Your_Side := 1 ;
  62: LD_ADDR_OWVAR 2
  66: PUSH
  67: LD_INT 1
  69: ST_TO_ADDR
// Side_Positions := [ 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 ] ;
  70: LD_ADDR_EXP 28
  74: PUSH
  75: LD_INT 1
  77: PUSH
  78: LD_INT 2
  80: PUSH
  81: LD_INT 3
  83: PUSH
  84: LD_INT 4
  86: PUSH
  87: LD_INT 5
  89: PUSH
  90: LD_INT 6
  92: PUSH
  93: LD_INT 7
  95: PUSH
  96: LD_INT 8
  98: PUSH
  99: EMPTY
 100: LIST
 101: LIST
 102: LIST
 103: LIST
 104: LIST
 105: LIST
 106: LIST
 107: LIST
 108: ST_TO_ADDR
// Side_Teams := [ 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 ] ;
 109: LD_ADDR_EXP 26
 113: PUSH
 114: LD_INT 1
 116: PUSH
 117: LD_INT 2
 119: PUSH
 120: LD_INT 3
 122: PUSH
 123: LD_INT 4
 125: PUSH
 126: LD_INT 5
 128: PUSH
 129: LD_INT 6
 131: PUSH
 132: LD_INT 7
 134: PUSH
 135: LD_INT 8
 137: PUSH
 138: EMPTY
 139: LIST
 140: LIST
 141: LIST
 142: LIST
 143: LIST
 144: LIST
 145: LIST
 146: LIST
 147: ST_TO_ADDR
// Side_Nations := [ 1 , 2 , 3 , 1 , 2 , 3 , 1 , 2 ] ;
 148: LD_ADDR_EXP 29
 152: PUSH
 153: LD_INT 1
 155: PUSH
 156: LD_INT 2
 158: PUSH
 159: LD_INT 3
 161: PUSH
 162: LD_INT 1
 164: PUSH
 165: LD_INT 2
 167: PUSH
 168: LD_INT 3
 170: PUSH
 171: LD_INT 1
 173: PUSH
 174: LD_INT 2
 176: PUSH
 177: EMPTY
 178: LIST
 179: LIST
 180: LIST
 181: LIST
 182: LIST
 183: LIST
 184: LIST
 185: LIST
 186: ST_TO_ADDR
// Teams := [ [ 1 ] , [ 2 ] , [ 3 ] , [ 4 ] , [ 5 ] , [ 6 ] ] ;
 187: LD_ADDR_EXP 27
 191: PUSH
 192: LD_INT 1
 194: PUSH
 195: EMPTY
 196: LIST
 197: PUSH
 198: LD_INT 2
 200: PUSH
 201: EMPTY
 202: LIST
 203: PUSH
 204: LD_INT 3
 206: PUSH
 207: EMPTY
 208: LIST
 209: PUSH
 210: LD_INT 4
 212: PUSH
 213: EMPTY
 214: LIST
 215: PUSH
 216: LD_INT 5
 218: PUSH
 219: EMPTY
 220: LIST
 221: PUSH
 222: LD_INT 6
 224: PUSH
 225: EMPTY
 226: LIST
 227: PUSH
 228: EMPTY
 229: LIST
 230: LIST
 231: LIST
 232: LIST
 233: LIST
 234: LIST
 235: ST_TO_ADDR
// end ; for i := 1 to 8 do
 236: LD_ADDR_VAR 0 2
 240: PUSH
 241: DOUBLE
 242: LD_INT 1
 244: DEC
 245: ST_TO_ADDR
 246: LD_INT 8
 248: PUSH
 249: FOR_TO
 250: IFFALSE 288
// if Multiplayer_GetPlayerIsSpec ( i ) then
 252: LD_VAR 0 2
 256: PPUSH
 257: CALL_OW 530
 261: IFFALSE 286
// Side_Positions := Replace ( Side_Positions , i , 0 ) ;
 263: LD_ADDR_EXP 28
 267: PUSH
 268: LD_EXP 28
 272: PPUSH
 273: LD_VAR 0 2
 277: PPUSH
 278: LD_INT 0
 280: PPUSH
 281: CALL_OW 1
 285: ST_TO_ADDR
 286: GO 249
 288: POP
 289: POP
// Position_Sides := [ 0 , 0 , 0 , 0 , 0 , 0 ] ;
 290: LD_ADDR_EXP 31
 294: PUSH
 295: LD_INT 0
 297: PUSH
 298: LD_INT 0
 300: PUSH
 301: LD_INT 0
 303: PUSH
 304: LD_INT 0
 306: PUSH
 307: LD_INT 0
 309: PUSH
 310: LD_INT 0
 312: PUSH
 313: EMPTY
 314: LIST
 315: LIST
 316: LIST
 317: LIST
 318: LIST
 319: LIST
 320: ST_TO_ADDR
// for i := 1 to 8 do
 321: LD_ADDR_VAR 0 2
 325: PUSH
 326: DOUBLE
 327: LD_INT 1
 329: DEC
 330: ST_TO_ADDR
 331: LD_INT 8
 333: PUSH
 334: FOR_TO
 335: IFFALSE 382
// if Side_Positions [ i ] then
 337: LD_EXP 28
 341: PUSH
 342: LD_VAR 0 2
 346: ARRAY
 347: IFFALSE 380
// Position_Sides := Replace ( Position_Sides , Side_Positions [ i ] , i ) ;
 349: LD_ADDR_EXP 31
 353: PUSH
 354: LD_EXP 31
 358: PPUSH
 359: LD_EXP 28
 363: PUSH
 364: LD_VAR 0 2
 368: ARRAY
 369: PPUSH
 370: LD_VAR 0 2
 374: PPUSH
 375: CALL_OW 1
 379: ST_TO_ADDR
 380: GO 334
 382: POP
 383: POP
// Team_Game := Side_Teams [ your_side ] ;
 384: LD_ADDR_EXP 30
 388: PUSH
 389: LD_EXP 26
 393: PUSH
 394: LD_OWVAR 2
 398: ARRAY
 399: ST_TO_ADDR
// if Multiplayer then
 400: LD_OWVAR 4
 404: IFFALSE 512
// begin def_base_level := GetMultiplayerSetting ( 0 ) ;
 406: LD_ADDR_EXP 1
 410: PUSH
 411: LD_INT 0
 413: PPUSH
 414: CALL_OW 426
 418: ST_TO_ADDR
// def_amount_of_people := GetMultiplayerSetting ( 1 ) ;
 419: LD_ADDR_EXP 2
 423: PUSH
 424: LD_INT 1
 426: PPUSH
 427: CALL_OW 426
 431: ST_TO_ADDR
// def_skill_level := GetMultiplayerSetting ( 2 ) ;
 432: LD_ADDR_EXP 3
 436: PUSH
 437: LD_INT 2
 439: PPUSH
 440: CALL_OW 426
 444: ST_TO_ADDR
// def_starting_resources := GetMultiplayerSetting ( 3 ) ;
 445: LD_ADDR_EXP 4
 449: PUSH
 450: LD_INT 3
 452: PPUSH
 453: CALL_OW 426
 457: ST_TO_ADDR
// def_shipments_density := GetMultiplayerSetting ( 4 ) ;
 458: LD_ADDR_EXP 5
 462: PUSH
 463: LD_INT 4
 465: PPUSH
 466: CALL_OW 426
 470: ST_TO_ADDR
// def_shared_vision := GetMultiplayerSetting ( 10 ) ;
 471: LD_ADDR_EXP 6
 475: PUSH
 476: LD_INT 10
 478: PPUSH
 479: CALL_OW 426
 483: ST_TO_ADDR
// def_people_respawning := GetMultiplayerSetting ( 13 ) ;
 484: LD_ADDR_EXP 7
 488: PUSH
 489: LD_INT 13
 491: PPUSH
 492: CALL_OW 426
 496: ST_TO_ADDR
// def_siberite_bomb := GetMultiplayerSetting ( 14 ) ;
 497: LD_ADDR_EXP 40
 501: PUSH
 502: LD_INT 14
 504: PPUSH
 505: CALL_OW 426
 509: ST_TO_ADDR
// end else
 510: GO 572
// begin Randomize ;
 512: CALL_OW 10
// def_base_level := 2 ;
 516: LD_ADDR_EXP 1
 520: PUSH
 521: LD_INT 2
 523: ST_TO_ADDR
// def_amount_of_people := 0 ;
 524: LD_ADDR_EXP 2
 528: PUSH
 529: LD_INT 0
 531: ST_TO_ADDR
// def_skill_level := 1 ;
 532: LD_ADDR_EXP 3
 536: PUSH
 537: LD_INT 1
 539: ST_TO_ADDR
// def_starting_resources := 2 ;
 540: LD_ADDR_EXP 4
 544: PUSH
 545: LD_INT 2
 547: ST_TO_ADDR
// def_shipments_density := 1 ;
 548: LD_ADDR_EXP 5
 552: PUSH
 553: LD_INT 1
 555: ST_TO_ADDR
// def_shared_vision := 1 ;
 556: LD_ADDR_EXP 6
 560: PUSH
 561: LD_INT 1
 563: ST_TO_ADDR
// def_people_respawning := 2 ;
 564: LD_ADDR_EXP 7
 568: PUSH
 569: LD_INT 2
 571: ST_TO_ADDR
// end ; is_depot := [ 0 , 1 , 2 ] [ def_base_level + 1 ] ;
 572: LD_ADDR_EXP 8
 576: PUSH
 577: LD_INT 0
 579: PUSH
 580: LD_INT 1
 582: PUSH
 583: LD_INT 2
 585: PUSH
 586: EMPTY
 587: LIST
 588: LIST
 589: LIST
 590: PUSH
 591: LD_EXP 1
 595: PUSH
 596: LD_INT 1
 598: PLUS
 599: ARRAY
 600: ST_TO_ADDR
// number_of_breastworks := [ 0 , 0 , 2 ] [ def_base_level + 1 ] ;
 601: LD_ADDR_EXP 9
 605: PUSH
 606: LD_INT 0
 608: PUSH
 609: LD_INT 0
 611: PUSH
 612: LD_INT 2
 614: PUSH
 615: EMPTY
 616: LIST
 617: LIST
 618: LIST
 619: PUSH
 620: LD_EXP 1
 624: PUSH
 625: LD_INT 1
 627: PLUS
 628: ARRAY
 629: ST_TO_ADDR
// number_of_people := [ 9 , 12 , 15 , 24 ] [ def_amount_of_people + 1 ] ;
 630: LD_ADDR_EXP 10
 634: PUSH
 635: LD_INT 9
 637: PUSH
 638: LD_INT 12
 640: PUSH
 641: LD_INT 15
 643: PUSH
 644: LD_INT 24
 646: PUSH
 647: EMPTY
 648: LIST
 649: LIST
 650: LIST
 651: LIST
 652: PUSH
 653: LD_EXP 2
 657: PUSH
 658: LD_INT 1
 660: PLUS
 661: ARRAY
 662: ST_TO_ADDR
// skill_level := [ 3 , 5 , 6 , 7 ] [ def_skill_level + 1 ] ;
 663: LD_ADDR_EXP 11
 667: PUSH
 668: LD_INT 3
 670: PUSH
 671: LD_INT 5
 673: PUSH
 674: LD_INT 6
 676: PUSH
 677: LD_INT 7
 679: PUSH
 680: EMPTY
 681: LIST
 682: LIST
 683: LIST
 684: LIST
 685: PUSH
 686: LD_EXP 3
 690: PUSH
 691: LD_INT 1
 693: PLUS
 694: ARRAY
 695: ST_TO_ADDR
// starting_resources := [ [ 0 , 0 , 0 ] , [ 30 , 30 , 0 ] , [ 50 , 50 , 0 ] , [ 80 , 60 , 0 ] ] [ def_starting_resources + 1 ] ;
 696: LD_ADDR_EXP 13
 700: PUSH
 701: LD_INT 0
 703: PUSH
 704: LD_INT 0
 706: PUSH
 707: LD_INT 0
 709: PUSH
 710: EMPTY
 711: LIST
 712: LIST
 713: LIST
 714: PUSH
 715: LD_INT 30
 717: PUSH
 718: LD_INT 30
 720: PUSH
 721: LD_INT 0
 723: PUSH
 724: EMPTY
 725: LIST
 726: LIST
 727: LIST
 728: PUSH
 729: LD_INT 50
 731: PUSH
 732: LD_INT 50
 734: PUSH
 735: LD_INT 0
 737: PUSH
 738: EMPTY
 739: LIST
 740: LIST
 741: LIST
 742: PUSH
 743: LD_INT 80
 745: PUSH
 746: LD_INT 60
 748: PUSH
 749: LD_INT 0
 751: PUSH
 752: EMPTY
 753: LIST
 754: LIST
 755: LIST
 756: PUSH
 757: EMPTY
 758: LIST
 759: LIST
 760: LIST
 761: LIST
 762: PUSH
 763: LD_EXP 4
 767: PUSH
 768: LD_INT 1
 770: PLUS
 771: ARRAY
 772: ST_TO_ADDR
// starting_crates := [ [ 10 ] , [ 7 , 14 ] , [ 6 , 12 , 18 ] , [ 5 , 10 , 15 , 20 ] ] [ def_starting_resources + 1 ] ;
 773: LD_ADDR_EXP 12
 777: PUSH
 778: LD_INT 10
 780: PUSH
 781: EMPTY
 782: LIST
 783: PUSH
 784: LD_INT 7
 786: PUSH
 787: LD_INT 14
 789: PUSH
 790: EMPTY
 791: LIST
 792: LIST
 793: PUSH
 794: LD_INT 6
 796: PUSH
 797: LD_INT 12
 799: PUSH
 800: LD_INT 18
 802: PUSH
 803: EMPTY
 804: LIST
 805: LIST
 806: LIST
 807: PUSH
 808: LD_INT 5
 810: PUSH
 811: LD_INT 10
 813: PUSH
 814: LD_INT 15
 816: PUSH
 817: LD_INT 20
 819: PUSH
 820: EMPTY
 821: LIST
 822: LIST
 823: LIST
 824: LIST
 825: PUSH
 826: EMPTY
 827: LIST
 828: LIST
 829: LIST
 830: LIST
 831: PUSH
 832: LD_EXP 4
 836: PUSH
 837: LD_INT 1
 839: PLUS
 840: ARRAY
 841: ST_TO_ADDR
// shipments_density := [ 150 , 125 , 100 , 50 ] [ def_shipments_density + 1 ] ;
 842: LD_ADDR_EXP 14
 846: PUSH
 847: LD_INT 150
 849: PUSH
 850: LD_INT 125
 852: PUSH
 853: LD_INT 100
 855: PUSH
 856: LD_INT 50
 858: PUSH
 859: EMPTY
 860: LIST
 861: LIST
 862: LIST
 863: LIST
 864: PUSH
 865: LD_EXP 5
 869: PUSH
 870: LD_INT 1
 872: PLUS
 873: ARRAY
 874: ST_TO_ADDR
// respawning_time_min := [ 0 0$0 , 5 5$00 , 3 3$0 ] [ def_people_respawning + 1 ] ;
 875: LD_ADDR_EXP 18
 879: PUSH
 880: LD_INT 0
 882: PUSH
 883: LD_INT 10500
 885: PUSH
 886: LD_INT 6300
 888: PUSH
 889: EMPTY
 890: LIST
 891: LIST
 892: LIST
 893: PUSH
 894: LD_EXP 7
 898: PUSH
 899: LD_INT 1
 901: PLUS
 902: ARRAY
 903: ST_TO_ADDR
// respawning_time_max := [ 0 0$0 , 15 15$00 , 5 5$0 ] [ def_people_respawning + 1 ] ;
 904: LD_ADDR_EXP 19
 908: PUSH
 909: LD_INT 0
 911: PUSH
 912: LD_INT 31500
 914: PUSH
 915: LD_INT 10500
 917: PUSH
 918: EMPTY
 919: LIST
 920: LIST
 921: LIST
 922: PUSH
 923: LD_EXP 7
 927: PUSH
 928: LD_INT 1
 930: PLUS
 931: ARRAY
 932: ST_TO_ADDR
// siberite_bomb := [ 0 , 1 , 2 , 3 ] [ def_siberite_bomb + 1 ] ;
 933: LD_ADDR_EXP 41
 937: PUSH
 938: LD_INT 0
 940: PUSH
 941: LD_INT 1
 943: PUSH
 944: LD_INT 2
 946: PUSH
 947: LD_INT 3
 949: PUSH
 950: EMPTY
 951: LIST
 952: LIST
 953: LIST
 954: LIST
 955: PUSH
 956: LD_EXP 40
 960: PUSH
 961: LD_INT 1
 963: PLUS
 964: ARRAY
 965: ST_TO_ADDR
// end ;
 966: LD_VAR 0 1
 970: RET
// function init_map ; var i , j ; begin
 971: LD_INT 0
 973: PPUSH
 974: PPUSH
 975: PPUSH
// depot_def := [ [ 44 , 72 , 0 ] , [ 38 , 53 , 1 ] , [ 58 , 6 , 3 ] , [ 74 , 6 , 3 ] , [ 173 , 55 , 4 ] , [ 186 , 77 , 4 ] , [ 249 , 195 , 5 ] , [ 252 , 193 , 5 ] ] ;
 976: LD_ADDR_EXP 32
 980: PUSH
 981: LD_INT 44
 983: PUSH
 984: LD_INT 72
 986: PUSH
 987: LD_INT 0
 989: PUSH
 990: EMPTY
 991: LIST
 992: LIST
 993: LIST
 994: PUSH
 995: LD_INT 38
 997: PUSH
 998: LD_INT 53
1000: PUSH
1001: LD_INT 1
1003: PUSH
1004: EMPTY
1005: LIST
1006: LIST
1007: LIST
1008: PUSH
1009: LD_INT 58
1011: PUSH
1012: LD_INT 6
1014: PUSH
1015: LD_INT 3
1017: PUSH
1018: EMPTY
1019: LIST
1020: LIST
1021: LIST
1022: PUSH
1023: LD_INT 74
1025: PUSH
1026: LD_INT 6
1028: PUSH
1029: LD_INT 3
1031: PUSH
1032: EMPTY
1033: LIST
1034: LIST
1035: LIST
1036: PUSH
1037: LD_INT 173
1039: PUSH
1040: LD_INT 55
1042: PUSH
1043: LD_INT 4
1045: PUSH
1046: EMPTY
1047: LIST
1048: LIST
1049: LIST
1050: PUSH
1051: LD_INT 186
1053: PUSH
1054: LD_INT 77
1056: PUSH
1057: LD_INT 4
1059: PUSH
1060: EMPTY
1061: LIST
1062: LIST
1063: LIST
1064: PUSH
1065: LD_INT 249
1067: PUSH
1068: LD_INT 195
1070: PUSH
1071: LD_INT 5
1073: PUSH
1074: EMPTY
1075: LIST
1076: LIST
1077: LIST
1078: PUSH
1079: LD_INT 252
1081: PUSH
1082: LD_INT 193
1084: PUSH
1085: LD_INT 5
1087: PUSH
1088: EMPTY
1089: LIST
1090: LIST
1091: LIST
1092: PUSH
1093: EMPTY
1094: LIST
1095: LIST
1096: LIST
1097: LIST
1098: LIST
1099: LIST
1100: LIST
1101: LIST
1102: ST_TO_ADDR
// for i in depot_def do
1103: LD_ADDR_VAR 0 2
1107: PUSH
1108: LD_EXP 32
1112: PUSH
1113: FOR_IN
1114: IFFALSE 1188
// start_def := start_def ^ [ [ ShiftX ( i [ 1 ] , i [ 3 ] , 10 ) , ShiftY ( i [ 2 ] , i [ 3 ] , 10 ) ] ] ;
1116: LD_ADDR_EXP 34
1120: PUSH
1121: LD_EXP 34
1125: PUSH
1126: LD_VAR 0 2
1130: PUSH
1131: LD_INT 1
1133: ARRAY
1134: PPUSH
1135: LD_VAR 0 2
1139: PUSH
1140: LD_INT 3
1142: ARRAY
1143: PPUSH
1144: LD_INT 10
1146: PPUSH
1147: CALL_OW 272
1151: PUSH
1152: LD_VAR 0 2
1156: PUSH
1157: LD_INT 2
1159: ARRAY
1160: PPUSH
1161: LD_VAR 0 2
1165: PUSH
1166: LD_INT 3
1168: ARRAY
1169: PPUSH
1170: LD_INT 10
1172: PPUSH
1173: CALL_OW 273
1177: PUSH
1178: EMPTY
1179: LIST
1180: LIST
1181: PUSH
1182: EMPTY
1183: LIST
1184: ADD
1185: ST_TO_ADDR
1186: GO 1113
1188: POP
1189: POP
// breastworks_def := [ [ [ 61 , 97 , 5 ] , [ 68 , 92 , 5 ] ] , [ [ 62 , 71 , 4 ] , [ 54 , 55 , 4 ] ] , [ [ 47 , 21 , 0 ] , [ 57 , 28 , 0 ] ] , [ [ 74 , 26 , 0 ] , [ 77 , 26 , 0 ] ] , [ [ 154 , 43 , 1 ] , [ 155 , 57 , 1 ] ] , [ [ 197 , 107 , 0 ] , [ 191 , 107 , 0 ] ] , [ [ 235 , 173 , 2 ] , [ 218 , 170 , 2 ] ] , [ [ 208 , 175 , 2 ] , [ 205 , 181 , 2 ] ] , ] ;
1190: LD_ADDR_EXP 33
1194: PUSH
1195: LD_INT 61
1197: PUSH
1198: LD_INT 97
1200: PUSH
1201: LD_INT 5
1203: PUSH
1204: EMPTY
1205: LIST
1206: LIST
1207: LIST
1208: PUSH
1209: LD_INT 68
1211: PUSH
1212: LD_INT 92
1214: PUSH
1215: LD_INT 5
1217: PUSH
1218: EMPTY
1219: LIST
1220: LIST
1221: LIST
1222: PUSH
1223: EMPTY
1224: LIST
1225: LIST
1226: PUSH
1227: LD_INT 62
1229: PUSH
1230: LD_INT 71
1232: PUSH
1233: LD_INT 4
1235: PUSH
1236: EMPTY
1237: LIST
1238: LIST
1239: LIST
1240: PUSH
1241: LD_INT 54
1243: PUSH
1244: LD_INT 55
1246: PUSH
1247: LD_INT 4
1249: PUSH
1250: EMPTY
1251: LIST
1252: LIST
1253: LIST
1254: PUSH
1255: EMPTY
1256: LIST
1257: LIST
1258: PUSH
1259: LD_INT 47
1261: PUSH
1262: LD_INT 21
1264: PUSH
1265: LD_INT 0
1267: PUSH
1268: EMPTY
1269: LIST
1270: LIST
1271: LIST
1272: PUSH
1273: LD_INT 57
1275: PUSH
1276: LD_INT 28
1278: PUSH
1279: LD_INT 0
1281: PUSH
1282: EMPTY
1283: LIST
1284: LIST
1285: LIST
1286: PUSH
1287: EMPTY
1288: LIST
1289: LIST
1290: PUSH
1291: LD_INT 74
1293: PUSH
1294: LD_INT 26
1296: PUSH
1297: LD_INT 0
1299: PUSH
1300: EMPTY
1301: LIST
1302: LIST
1303: LIST
1304: PUSH
1305: LD_INT 77
1307: PUSH
1308: LD_INT 26
1310: PUSH
1311: LD_INT 0
1313: PUSH
1314: EMPTY
1315: LIST
1316: LIST
1317: LIST
1318: PUSH
1319: EMPTY
1320: LIST
1321: LIST
1322: PUSH
1323: LD_INT 154
1325: PUSH
1326: LD_INT 43
1328: PUSH
1329: LD_INT 1
1331: PUSH
1332: EMPTY
1333: LIST
1334: LIST
1335: LIST
1336: PUSH
1337: LD_INT 155
1339: PUSH
1340: LD_INT 57
1342: PUSH
1343: LD_INT 1
1345: PUSH
1346: EMPTY
1347: LIST
1348: LIST
1349: LIST
1350: PUSH
1351: EMPTY
1352: LIST
1353: LIST
1354: PUSH
1355: LD_INT 197
1357: PUSH
1358: LD_INT 107
1360: PUSH
1361: LD_INT 0
1363: PUSH
1364: EMPTY
1365: LIST
1366: LIST
1367: LIST
1368: PUSH
1369: LD_INT 191
1371: PUSH
1372: LD_INT 107
1374: PUSH
1375: LD_INT 0
1377: PUSH
1378: EMPTY
1379: LIST
1380: LIST
1381: LIST
1382: PUSH
1383: EMPTY
1384: LIST
1385: LIST
1386: PUSH
1387: LD_INT 235
1389: PUSH
1390: LD_INT 173
1392: PUSH
1393: LD_INT 2
1395: PUSH
1396: EMPTY
1397: LIST
1398: LIST
1399: LIST
1400: PUSH
1401: LD_INT 218
1403: PUSH
1404: LD_INT 170
1406: PUSH
1407: LD_INT 2
1409: PUSH
1410: EMPTY
1411: LIST
1412: LIST
1413: LIST
1414: PUSH
1415: EMPTY
1416: LIST
1417: LIST
1418: PUSH
1419: LD_INT 208
1421: PUSH
1422: LD_INT 175
1424: PUSH
1425: LD_INT 2
1427: PUSH
1428: EMPTY
1429: LIST
1430: LIST
1431: LIST
1432: PUSH
1433: LD_INT 205
1435: PUSH
1436: LD_INT 181
1438: PUSH
1439: LD_INT 2
1441: PUSH
1442: EMPTY
1443: LIST
1444: LIST
1445: LIST
1446: PUSH
1447: EMPTY
1448: LIST
1449: LIST
1450: PUSH
1451: EMPTY
1452: LIST
1453: LIST
1454: LIST
1455: LIST
1456: LIST
1457: LIST
1458: LIST
1459: LIST
1460: ST_TO_ADDR
// end ;
1461: LD_VAR 0 1
1465: RET
// function set_shared_visions_and_alliances ; var i , j ; begin
1466: LD_INT 0
1468: PPUSH
1469: PPUSH
1470: PPUSH
// if not Team_Game then
1471: LD_EXP 30
1475: NOT
1476: IFFALSE 1574
// begin for i = 1 to 8 do
1478: LD_ADDR_VAR 0 2
1482: PUSH
1483: DOUBLE
1484: LD_INT 1
1486: DEC
1487: ST_TO_ADDR
1488: LD_INT 8
1490: PUSH
1491: FOR_TO
1492: IFFALSE 1570
// for j = 1 to 8 do
1494: LD_ADDR_VAR 0 3
1498: PUSH
1499: DOUBLE
1500: LD_INT 1
1502: DEC
1503: ST_TO_ADDR
1504: LD_INT 8
1506: PUSH
1507: FOR_TO
1508: IFFALSE 1566
// if i <> j then
1510: LD_VAR 0 2
1514: PUSH
1515: LD_VAR 0 3
1519: NONEQUAL
1520: IFFALSE 1544
// SetAttitude ( i , j , att_neutral , true ) else
1522: LD_VAR 0 2
1526: PPUSH
1527: LD_VAR 0 3
1531: PPUSH
1532: LD_INT 0
1534: PPUSH
1535: LD_INT 1
1537: PPUSH
1538: CALL_OW 80
1542: GO 1564
// SetAttitude ( i , j , att_friend , true ) ;
1544: LD_VAR 0 2
1548: PPUSH
1549: LD_VAR 0 3
1553: PPUSH
1554: LD_INT 1
1556: PPUSH
1557: LD_INT 1
1559: PPUSH
1560: CALL_OW 80
1564: GO 1507
1566: POP
1567: POP
1568: GO 1491
1570: POP
1571: POP
// end else
1572: GO 1749
// begin if def_shared_vision then
1574: LD_EXP 6
1578: IFFALSE 1643
// begin for i in Teams do
1580: LD_ADDR_VAR 0 2
1584: PUSH
1585: LD_EXP 27
1589: PUSH
1590: FOR_IN
1591: IFFALSE 1641
// for j = 2 to i do
1593: LD_ADDR_VAR 0 3
1597: PUSH
1598: DOUBLE
1599: LD_INT 2
1601: DEC
1602: ST_TO_ADDR
1603: LD_VAR 0 2
1607: PUSH
1608: FOR_TO
1609: IFFALSE 1637
// ChangeSideFog ( i [ j ] , i [ 1 ] ) ;
1611: LD_VAR 0 2
1615: PUSH
1616: LD_VAR 0 3
1620: ARRAY
1621: PPUSH
1622: LD_VAR 0 2
1626: PUSH
1627: LD_INT 1
1629: ARRAY
1630: PPUSH
1631: CALL_OW 343
1635: GO 1608
1637: POP
1638: POP
1639: GO 1590
1641: POP
1642: POP
// end ; for i = 1 to 8 do
1643: LD_ADDR_VAR 0 2
1647: PUSH
1648: DOUBLE
1649: LD_INT 1
1651: DEC
1652: ST_TO_ADDR
1653: LD_INT 8
1655: PUSH
1656: FOR_TO
1657: IFFALSE 1747
// for j = 1 to 8 do
1659: LD_ADDR_VAR 0 3
1663: PUSH
1664: DOUBLE
1665: LD_INT 1
1667: DEC
1668: ST_TO_ADDR
1669: LD_INT 8
1671: PUSH
1672: FOR_TO
1673: IFFALSE 1743
// if Side_Teams [ i ] = Side_Teams [ j ] then
1675: LD_EXP 26
1679: PUSH
1680: LD_VAR 0 2
1684: ARRAY
1685: PUSH
1686: LD_EXP 26
1690: PUSH
1691: LD_VAR 0 3
1695: ARRAY
1696: EQUAL
1697: IFFALSE 1721
// SetAttitude ( i , j , att_friend , true ) else
1699: LD_VAR 0 2
1703: PPUSH
1704: LD_VAR 0 3
1708: PPUSH
1709: LD_INT 1
1711: PPUSH
1712: LD_INT 1
1714: PPUSH
1715: CALL_OW 80
1719: GO 1741
// SetAttitude ( i , j , att_enemy , true ) ;
1721: LD_VAR 0 2
1725: PPUSH
1726: LD_VAR 0 3
1730: PPUSH
1731: LD_INT 2
1733: PPUSH
1734: LD_INT 1
1736: PPUSH
1737: CALL_OW 80
1741: GO 1672
1743: POP
1744: POP
1745: GO 1656
1747: POP
1748: POP
// end ; end ;
1749: LD_VAR 0 1
1753: RET
// function prepare_people ( count , cl , x , y , r ) ; var i , j , un ; begin
1754: LD_INT 0
1756: PPUSH
1757: PPUSH
1758: PPUSH
1759: PPUSH
// result := [ ] ;
1760: LD_ADDR_VAR 0 6
1764: PUSH
1765: EMPTY
1766: ST_TO_ADDR
// for i := 1 to count do
1767: LD_ADDR_VAR 0 7
1771: PUSH
1772: DOUBLE
1773: LD_INT 1
1775: DEC
1776: ST_TO_ADDR
1777: LD_VAR 0 1
1781: PUSH
1782: FOR_TO
1783: IFFALSE 2179
// begin uc_direction := Rand ( 0 , 5 ) ;
1785: LD_ADDR_OWVAR 24
1789: PUSH
1790: LD_INT 0
1792: PPUSH
1793: LD_INT 5
1795: PPUSH
1796: CALL_OW 12
1800: ST_TO_ADDR
// if commander then
1801: LD_LOC 1
1805: IFFALSE 1914
// begin hc_name := mp_sides_players_names [ uc_side ] ;
1807: LD_ADDR_OWVAR 26
1811: PUSH
1812: LD_OWVAR 19
1816: PUSH
1817: LD_OWVAR 20
1821: ARRAY
1822: ST_TO_ADDR
// PrepareHuman ( Rand ( 1 , 2 ) , cl , skill_level + 2 ) ;
1823: LD_INT 1
1825: PPUSH
1826: LD_INT 2
1828: PPUSH
1829: CALL_OW 12
1833: PPUSH
1834: LD_VAR 0 2
1838: PPUSH
1839: LD_EXP 11
1843: PUSH
1844: LD_INT 2
1846: PLUS
1847: PPUSH
1848: CALL_OW 380
// hc_importance := 105 ;
1852: LD_ADDR_OWVAR 32
1856: PUSH
1857: LD_INT 105
1859: ST_TO_ADDR
// commander := false ;
1860: LD_ADDR_LOC 1
1864: PUSH
1865: LD_INT 0
1867: ST_TO_ADDR
// if Multiplayer then
1868: LD_OWVAR 4
1872: IFFALSE 1912
// begin hc_gallery := MULTIAVATARS ;
1874: LD_ADDR_OWVAR 33
1878: PUSH
1879: LD_STRING MULTIAVATARS
1881: ST_TO_ADDR
// hc_face_number := Multiplayer_GetPlayerSideNum ( uc_side ) ;
1882: LD_ADDR_OWVAR 34
1886: PUSH
1887: LD_OWVAR 20
1891: PPUSH
1892: CALL_OW 525
1896: ST_TO_ADDR
// hc_sex := Multiplayer_GetPlayerSex ( uc_side ) ;
1897: LD_ADDR_OWVAR 27
1901: PUSH
1902: LD_OWVAR 20
1906: PPUSH
1907: CALL_OW 526
1911: ST_TO_ADDR
// end ; end else
1912: GO 1977
// begin hc_name :=  ;
1914: LD_ADDR_OWVAR 26
1918: PUSH
1919: LD_STRING 
1921: ST_TO_ADDR
// PrepareHuman ( rand ( 1 , 2 ) , cl , skill_level ) ;
1922: LD_INT 1
1924: PPUSH
1925: LD_INT 2
1927: PPUSH
1928: CALL_OW 12
1932: PPUSH
1933: LD_VAR 0 2
1937: PPUSH
1938: LD_EXP 11
1942: PPUSH
1943: CALL_OW 380
// hc_importance := 0 ;
1947: LD_ADDR_OWVAR 32
1951: PUSH
1952: LD_INT 0
1954: ST_TO_ADDR
// if Multiplayer then
1955: LD_OWVAR 4
1959: IFFALSE 1977
// begin hc_gallery :=  ;
1961: LD_ADDR_OWVAR 33
1965: PUSH
1966: LD_STRING 
1968: ST_TO_ADDR
// hc_face_number := 0 ;
1969: LD_ADDR_OWVAR 34
1973: PUSH
1974: LD_INT 0
1976: ST_TO_ADDR
// end ; end ; un := CreateHuman ;
1977: LD_ADDR_VAR 0 9
1981: PUSH
1982: CALL_OW 44
1986: ST_TO_ADDR
// if global_defined then
1987: LD_LOC 3
1991: IFFALSE 2131
// begin if ( cl = class_soldier ) then
1993: LD_VAR 0 2
1997: PUSH
1998: LD_INT 1
2000: EQUAL
2001: IFFALSE 2021
// j := i + soldiers_created else
2003: LD_ADDR_VAR 0 8
2007: PUSH
2008: LD_VAR 0 7
2012: PUSH
2013: LD_LOC 4
2017: PLUS
2018: ST_TO_ADDR
2019: GO 2031
// j := i ;
2021: LD_ADDR_VAR 0 8
2025: PUSH
2026: LD_VAR 0 7
2030: ST_TO_ADDR
// CopySkills ( global_units [ cl ] [ j ] , un ) ;
2031: LD_LOC 2
2035: PUSH
2036: LD_VAR 0 2
2040: ARRAY
2041: PUSH
2042: LD_VAR 0 8
2046: ARRAY
2047: PPUSH
2048: LD_VAR 0 9
2052: PPUSH
2053: CALL_OW 510
// SetAttr ( un , attr_speed , GetAttr ( global_units [ cl ] [ j ] , attr_speed ) ) ;
2057: LD_VAR 0 9
2061: PPUSH
2062: LD_INT 2
2064: PPUSH
2065: LD_LOC 2
2069: PUSH
2070: LD_VAR 0 2
2074: ARRAY
2075: PUSH
2076: LD_VAR 0 8
2080: ARRAY
2081: PPUSH
2082: LD_INT 2
2084: PPUSH
2085: CALL_OW 260
2089: PPUSH
2090: CALL_OW 239
// SetAttr ( un , attr_stamina , GetAttr ( global_units [ cl ] [ j ] , attr_stamina ) ) ;
2094: LD_VAR 0 9
2098: PPUSH
2099: LD_INT 1
2101: PPUSH
2102: LD_LOC 2
2106: PUSH
2107: LD_VAR 0 2
2111: ARRAY
2112: PUSH
2113: LD_VAR 0 8
2117: ARRAY
2118: PPUSH
2119: LD_INT 1
2121: PPUSH
2122: CALL_OW 260
2126: PPUSH
2127: CALL_OW 239
// end ; PlaceUnitXYR ( un , x , y , r , false ) ;
2131: LD_VAR 0 9
2135: PPUSH
2136: LD_VAR 0 3
2140: PPUSH
2141: LD_VAR 0 4
2145: PPUSH
2146: LD_VAR 0 5
2150: PPUSH
2151: LD_INT 0
2153: PPUSH
2154: CALL_OW 50
// result := result ^ [ un ] ;
2158: LD_ADDR_VAR 0 6
2162: PUSH
2163: LD_VAR 0 6
2167: PUSH
2168: LD_VAR 0 9
2172: PUSH
2173: EMPTY
2174: LIST
2175: ADD
2176: ST_TO_ADDR
// end ;
2177: GO 1782
2179: POP
2180: POP
// if not global_defined then
2181: LD_LOC 3
2185: NOT
2186: IFFALSE 2264
// if ( global_units >= cl ) then
2188: LD_LOC 2
2192: PUSH
2193: LD_VAR 0 2
2197: GREATEREQUAL
2198: IFFALSE 2239
// global_units := Replace ( global_units , cl , global_units [ cl ] ^ result ) else
2200: LD_ADDR_LOC 2
2204: PUSH
2205: LD_LOC 2
2209: PPUSH
2210: LD_VAR 0 2
2214: PPUSH
2215: LD_LOC 2
2219: PUSH
2220: LD_VAR 0 2
2224: ARRAY
2225: PUSH
2226: LD_VAR 0 6
2230: ADD
2231: PPUSH
2232: CALL_OW 1
2236: ST_TO_ADDR
2237: GO 2264
// global_units := Replace ( global_units , cl , result ) ;
2239: LD_ADDR_LOC 2
2243: PUSH
2244: LD_LOC 2
2248: PPUSH
2249: LD_VAR 0 2
2253: PPUSH
2254: LD_VAR 0 6
2258: PPUSH
2259: CALL_OW 1
2263: ST_TO_ADDR
// end ;
2264: LD_VAR 0 6
2268: RET
// function prepare_side ( side ) ; var pos , x , y , dir , i , r , sol , br , dep ; begin
2269: LD_INT 0
2271: PPUSH
2272: PPUSH
2273: PPUSH
2274: PPUSH
2275: PPUSH
2276: PPUSH
2277: PPUSH
2278: PPUSH
2279: PPUSH
2280: PPUSH
// pos := Side_Positions [ side ] ;
2281: LD_ADDR_VAR 0 3
2285: PUSH
2286: LD_EXP 28
2290: PUSH
2291: LD_VAR 0 1
2295: ARRAY
2296: ST_TO_ADDR
// uc_nation := Side_Nations [ side ] ;
2297: LD_ADDR_OWVAR 21
2301: PUSH
2302: LD_EXP 29
2306: PUSH
2307: LD_VAR 0 1
2311: ARRAY
2312: ST_TO_ADDR
// uc_side := side ;
2313: LD_ADDR_OWVAR 20
2317: PUSH
2318: LD_VAR 0 1
2322: ST_TO_ADDR
// x := depot_def [ pos ] [ 1 ] ;
2323: LD_ADDR_VAR 0 4
2327: PUSH
2328: LD_EXP 32
2332: PUSH
2333: LD_VAR 0 3
2337: ARRAY
2338: PUSH
2339: LD_INT 1
2341: ARRAY
2342: ST_TO_ADDR
// y := depot_def [ pos ] [ 2 ] ;
2343: LD_ADDR_VAR 0 5
2347: PUSH
2348: LD_EXP 32
2352: PUSH
2353: LD_VAR 0 3
2357: ARRAY
2358: PUSH
2359: LD_INT 2
2361: ARRAY
2362: ST_TO_ADDR
// dir := depot_def [ pos ] [ 3 ] ;
2363: LD_ADDR_VAR 0 6
2367: PUSH
2368: LD_EXP 32
2372: PUSH
2373: LD_VAR 0 3
2377: ARRAY
2378: PUSH
2379: LD_INT 3
2381: ARRAY
2382: ST_TO_ADDR
// if is_depot then
2383: LD_EXP 8
2387: IFFALSE 2494
// begin bc_type = b_depot ;
2389: LD_ADDR_OWVAR 42
2393: PUSH
2394: LD_INT 0
2396: ST_TO_ADDR
// dep := CreateAndPlaceBuildingXYD ( x , y , dir ) ;
2397: LD_ADDR_VAR 0 11
2401: PUSH
2402: LD_VAR 0 4
2406: PPUSH
2407: LD_VAR 0 5
2411: PPUSH
2412: LD_VAR 0 6
2416: PPUSH
2417: CALL_OW 47
2421: ST_TO_ADDR
// SetBName ( dep , @ & side ) ;
2422: LD_VAR 0 11
2426: PPUSH
2427: LD_STRING @
2429: PUSH
2430: LD_VAR 0 1
2434: STR
2435: PPUSH
2436: CALL_OW 500
// SetResourceType ( GetBase ( dep ) , mat_cans , starting_resources [ mat_cans ] ) ;
2440: LD_VAR 0 11
2444: PPUSH
2445: CALL_OW 274
2449: PPUSH
2450: LD_INT 1
2452: PPUSH
2453: LD_EXP 13
2457: PUSH
2458: LD_INT 1
2460: ARRAY
2461: PPUSH
2462: CALL_OW 277
// SetResourceType ( GetBase ( dep ) , mat_oil , starting_resources [ mat_oil ] ) ;
2466: LD_VAR 0 11
2470: PPUSH
2471: CALL_OW 274
2475: PPUSH
2476: LD_INT 2
2478: PPUSH
2479: LD_EXP 13
2483: PUSH
2484: LD_INT 2
2486: ARRAY
2487: PPUSH
2488: CALL_OW 277
// end else
2492: GO 2638
// begin for i := 1 to 3 do
2494: LD_ADDR_VAR 0 7
2498: PUSH
2499: DOUBLE
2500: LD_INT 1
2502: DEC
2503: ST_TO_ADDR
2504: LD_INT 3
2506: PUSH
2507: FOR_TO
2508: IFFALSE 2636
// begin r := starting_resources [ i ] ;
2510: LD_ADDR_VAR 0 8
2514: PUSH
2515: LD_EXP 13
2519: PUSH
2520: LD_VAR 0 7
2524: ARRAY
2525: ST_TO_ADDR
// while r >= 10 do
2526: LD_VAR 0 8
2530: PUSH
2531: LD_INT 10
2533: GREATEREQUAL
2534: IFFALSE 2634
// if r > 50 then
2536: LD_VAR 0 8
2540: PUSH
2541: LD_INT 50
2543: GREATER
2544: IFFALSE 2590
// begin CreateResourcesXYR ( i , 5 , x , y , 4 , false ) ;
2546: LD_VAR 0 7
2550: PPUSH
2551: LD_INT 5
2553: PPUSH
2554: LD_VAR 0 4
2558: PPUSH
2559: LD_VAR 0 5
2563: PPUSH
2564: LD_INT 4
2566: PPUSH
2567: LD_INT 0
2569: PPUSH
2570: CALL_OW 60
// r := r - 50 ;
2574: LD_ADDR_VAR 0 8
2578: PUSH
2579: LD_VAR 0 8
2583: PUSH
2584: LD_INT 50
2586: MINUS
2587: ST_TO_ADDR
// end else
2588: GO 2632
// begin CreateResourcesXYR ( i , r div 10 , x , y , 4 , false ) ;
2590: LD_VAR 0 7
2594: PPUSH
2595: LD_VAR 0 8
2599: PUSH
2600: LD_INT 10
2602: DIV
2603: PPUSH
2604: LD_VAR 0 4
2608: PPUSH
2609: LD_VAR 0 5
2613: PPUSH
2614: LD_INT 4
2616: PPUSH
2617: LD_INT 0
2619: PPUSH
2620: CALL_OW 60
// r := 0 ;
2624: LD_ADDR_VAR 0 8
2628: PUSH
2629: LD_INT 0
2631: ST_TO_ADDR
// end ;
2632: GO 2526
// end ;
2634: GO 2507
2636: POP
2637: POP
// end ; for r in starting_crates do
2638: LD_ADDR_VAR 0 8
2642: PUSH
2643: LD_EXP 12
2647: PUSH
2648: FOR_IN
2649: IFFALSE 2681
// CreateResourcesXYR ( mat_cans , 5 , x , y , r , false ) ;
2651: LD_INT 1
2653: PPUSH
2654: LD_INT 5
2656: PPUSH
2657: LD_VAR 0 4
2661: PPUSH
2662: LD_VAR 0 5
2666: PPUSH
2667: LD_VAR 0 8
2671: PPUSH
2672: LD_INT 0
2674: PPUSH
2675: CALL_OW 60
2679: GO 2648
2681: POP
2682: POP
// commander := true ;
2683: LD_ADDR_LOC 1
2687: PUSH
2688: LD_INT 1
2690: ST_TO_ADDR
// soldiers_created := 0 ;
2691: LD_ADDR_LOC 4
2695: PUSH
2696: LD_INT 0
2698: ST_TO_ADDR
// for i := 1 to number_of_breastworks do
2699: LD_ADDR_VAR 0 7
2703: PUSH
2704: DOUBLE
2705: LD_INT 1
2707: DEC
2708: ST_TO_ADDR
2709: LD_EXP 9
2713: PUSH
2714: FOR_TO
2715: IFFALSE 2937
// begin x := breastworks_def [ pos ] [ i ] [ 1 ] ;
2717: LD_ADDR_VAR 0 4
2721: PUSH
2722: LD_EXP 33
2726: PUSH
2727: LD_VAR 0 3
2731: ARRAY
2732: PUSH
2733: LD_VAR 0 7
2737: ARRAY
2738: PUSH
2739: LD_INT 1
2741: ARRAY
2742: ST_TO_ADDR
// y := breastworks_def [ pos ] [ i ] [ 2 ] ;
2743: LD_ADDR_VAR 0 5
2747: PUSH
2748: LD_EXP 33
2752: PUSH
2753: LD_VAR 0 3
2757: ARRAY
2758: PUSH
2759: LD_VAR 0 7
2763: ARRAY
2764: PUSH
2765: LD_INT 2
2767: ARRAY
2768: ST_TO_ADDR
// dir := breastworks_def [ pos ] [ i ] [ 3 ] ;
2769: LD_ADDR_VAR 0 6
2773: PUSH
2774: LD_EXP 33
2778: PUSH
2779: LD_VAR 0 3
2783: ARRAY
2784: PUSH
2785: LD_VAR 0 7
2789: ARRAY
2790: PUSH
2791: LD_INT 3
2793: ARRAY
2794: ST_TO_ADDR
// bc_type := b_breastwork ;
2795: LD_ADDR_OWVAR 42
2799: PUSH
2800: LD_INT 31
2802: ST_TO_ADDR
// br := CreateAndPlaceBuildingXYD ( x , y , dir ) ;
2803: LD_ADDR_VAR 0 10
2807: PUSH
2808: LD_VAR 0 4
2812: PPUSH
2813: LD_VAR 0 5
2817: PPUSH
2818: LD_VAR 0 6
2822: PPUSH
2823: CALL_OW 47
2827: ST_TO_ADDR
// x := ShiftX ( x , dir , 2 ) ;
2828: LD_ADDR_VAR 0 4
2832: PUSH
2833: LD_VAR 0 4
2837: PPUSH
2838: LD_VAR 0 6
2842: PPUSH
2843: LD_INT 2
2845: PPUSH
2846: CALL_OW 272
2850: ST_TO_ADDR
// y := ShiftY ( y , dir , 2 ) ;
2851: LD_ADDR_VAR 0 5
2855: PUSH
2856: LD_VAR 0 5
2860: PPUSH
2861: LD_VAR 0 6
2865: PPUSH
2866: LD_INT 2
2868: PPUSH
2869: CALL_OW 273
2873: ST_TO_ADDR
// sol := prepare_people ( 1 , class_soldier , x , y , 0 ) [ 1 ] ;
2874: LD_ADDR_VAR 0 9
2878: PUSH
2879: LD_INT 1
2881: PPUSH
2882: LD_INT 1
2884: PPUSH
2885: LD_VAR 0 4
2889: PPUSH
2890: LD_VAR 0 5
2894: PPUSH
2895: LD_INT 0
2897: PPUSH
2898: CALL 1754 0 5
2902: PUSH
2903: LD_INT 1
2905: ARRAY
2906: ST_TO_ADDR
// soldiers_created := soldiers_created + 1 ;
2907: LD_ADDR_LOC 4
2911: PUSH
2912: LD_LOC 4
2916: PUSH
2917: LD_INT 1
2919: PLUS
2920: ST_TO_ADDR
// ComEnterUnit ( sol , br ) ;
2921: LD_VAR 0 9
2925: PPUSH
2926: LD_VAR 0 10
2930: PPUSH
2931: CALL_OW 120
// end ;
2935: GO 2714
2937: POP
2938: POP
// x := start_def [ pos ] [ 1 ] ;
2939: LD_ADDR_VAR 0 4
2943: PUSH
2944: LD_EXP 34
2948: PUSH
2949: LD_VAR 0 3
2953: ARRAY
2954: PUSH
2955: LD_INT 1
2957: ARRAY
2958: ST_TO_ADDR
// y := start_def [ pos ] [ 2 ] ;
2959: LD_ADDR_VAR 0 5
2963: PUSH
2964: LD_EXP 34
2968: PUSH
2969: LD_VAR 0 3
2973: ARRAY
2974: PUSH
2975: LD_INT 2
2977: ARRAY
2978: ST_TO_ADDR
// prepare_people ( nsol - number_of_breastworks , class_soldier , x , y , 5 ) ;
2979: LD_LOC 8
2983: PUSH
2984: LD_EXP 9
2988: MINUS
2989: PPUSH
2990: LD_INT 1
2992: PPUSH
2993: LD_VAR 0 4
2997: PPUSH
2998: LD_VAR 0 5
3002: PPUSH
3003: LD_INT 5
3005: PPUSH
3006: CALL 1754 0 5
// prepare_people ( neng , class_engineer , x , y , 5 ) ;
3010: LD_LOC 5
3014: PPUSH
3015: LD_INT 2
3017: PPUSH
3018: LD_VAR 0 4
3022: PPUSH
3023: LD_VAR 0 5
3027: PPUSH
3028: LD_INT 5
3030: PPUSH
3031: CALL 1754 0 5
// prepare_people ( nmech , class_mechanic , x , y , 5 ) ;
3035: LD_LOC 7
3039: PPUSH
3040: LD_INT 3
3042: PPUSH
3043: LD_VAR 0 4
3047: PPUSH
3048: LD_VAR 0 5
3052: PPUSH
3053: LD_INT 5
3055: PPUSH
3056: CALL 1754 0 5
// prepare_people ( nsci , class_scientistic , x , y , 5 ) ;
3060: LD_LOC 6
3064: PPUSH
3065: LD_INT 4
3067: PPUSH
3068: LD_VAR 0 4
3072: PPUSH
3073: LD_VAR 0 5
3077: PPUSH
3078: LD_INT 5
3080: PPUSH
3081: CALL 1754 0 5
// global_defined := true ;
3085: LD_ADDR_LOC 3
3089: PUSH
3090: LD_INT 1
3092: ST_TO_ADDR
// end ;
3093: LD_VAR 0 2
3097: RET
// function prepare_sides ; var i ; begin
3098: LD_INT 0
3100: PPUSH
3101: PPUSH
// global_units := [ ] ;
3102: LD_ADDR_LOC 2
3106: PUSH
3107: EMPTY
3108: ST_TO_ADDR
// global_defined := false ;
3109: LD_ADDR_LOC 3
3113: PUSH
3114: LD_INT 0
3116: ST_TO_ADDR
// CountClassMembers ;
3117: CALL 3167 0 0
// for i := 1 to 8 do
3121: LD_ADDR_VAR 0 2
3125: PUSH
3126: DOUBLE
3127: LD_INT 1
3129: DEC
3130: ST_TO_ADDR
3131: LD_INT 8
3133: PUSH
3134: FOR_TO
3135: IFFALSE 3160
// if Side_Positions [ i ] then
3137: LD_EXP 28
3141: PUSH
3142: LD_VAR 0 2
3146: ARRAY
3147: IFFALSE 3158
// prepare_side ( i ) ;
3149: LD_VAR 0 2
3153: PPUSH
3154: CALL 2269 0 1
3158: GO 3134
3160: POP
3161: POP
// end ;
3162: LD_VAR 0 1
3166: RET
// function CountClassMembers ; var Mode ; begin
3167: LD_INT 0
3169: PPUSH
3170: PPUSH
// Mode := 1 ;
3171: LD_ADDR_VAR 0 2
3175: PUSH
3176: LD_INT 1
3178: ST_TO_ADDR
// neng := number_of_people ;
3179: LD_ADDR_LOC 5
3183: PUSH
3184: LD_EXP 10
3188: ST_TO_ADDR
// nsol := neng div [ 4 , 3 ] [ Mode ] ;
3189: LD_ADDR_LOC 8
3193: PUSH
3194: LD_LOC 5
3198: PUSH
3199: LD_INT 4
3201: PUSH
3202: LD_INT 3
3204: PUSH
3205: EMPTY
3206: LIST
3207: LIST
3208: PUSH
3209: LD_VAR 0 2
3213: ARRAY
3214: DIV
3215: ST_TO_ADDR
// if ( nsol < number_of_breastworks ) then
3216: LD_LOC 8
3220: PUSH
3221: LD_EXP 9
3225: LESS
3226: IFFALSE 3238
// nsol := number_of_breastworks ;
3228: LD_ADDR_LOC 8
3232: PUSH
3233: LD_EXP 9
3237: ST_TO_ADDR
// neng := neng - nsol ;
3238: LD_ADDR_LOC 5
3242: PUSH
3243: LD_LOC 5
3247: PUSH
3248: LD_LOC 8
3252: MINUS
3253: ST_TO_ADDR
// nsci := neng div [ 3 , 2 ] [ Mode ] ;
3254: LD_ADDR_LOC 6
3258: PUSH
3259: LD_LOC 5
3263: PUSH
3264: LD_INT 3
3266: PUSH
3267: LD_INT 2
3269: PUSH
3270: EMPTY
3271: LIST
3272: LIST
3273: PUSH
3274: LD_VAR 0 2
3278: ARRAY
3279: DIV
3280: ST_TO_ADDR
// if ( nsci < 1 ) then
3281: LD_LOC 6
3285: PUSH
3286: LD_INT 1
3288: LESS
3289: IFFALSE 3299
// nsci := 1 ;
3291: LD_ADDR_LOC 6
3295: PUSH
3296: LD_INT 1
3298: ST_TO_ADDR
// neng := neng - nsci ;
3299: LD_ADDR_LOC 5
3303: PUSH
3304: LD_LOC 5
3308: PUSH
3309: LD_LOC 6
3313: MINUS
3314: ST_TO_ADDR
// nmech := [ neng div 2 , 0 ] [ Mode ] ;
3315: LD_ADDR_LOC 7
3319: PUSH
3320: LD_LOC 5
3324: PUSH
3325: LD_INT 2
3327: DIV
3328: PUSH
3329: LD_INT 0
3331: PUSH
3332: EMPTY
3333: LIST
3334: LIST
3335: PUSH
3336: LD_VAR 0 2
3340: ARRAY
3341: ST_TO_ADDR
// neng := neng - nmech ;
3342: LD_ADDR_LOC 5
3346: PUSH
3347: LD_LOC 5
3351: PUSH
3352: LD_LOC 7
3356: MINUS
3357: ST_TO_ADDR
// if ( neng < 1 ) then
3358: LD_LOC 5
3362: PUSH
3363: LD_INT 1
3365: LESS
3366: IFFALSE 3376
// neng := 1 ;
3368: LD_ADDR_LOC 5
3372: PUSH
3373: LD_INT 1
3375: ST_TO_ADDR
// end ;
3376: LD_VAR 0 1
3380: RET
// starting var i ; begin enable_human_prediction := true ;
3381: LD_ADDR_OWVAR 51
3385: PUSH
3386: LD_INT 1
3388: ST_TO_ADDR
// mp_selectmsg := true ;
3389: LD_ADDR_OWVAR 13
3393: PUSH
3394: LD_INT 1
3396: ST_TO_ADDR
// read_multiplayer_and_game_parameters ;
3397: CALL 0 0 0
// init_map ;
3401: CALL 971 0 0
// init_respawning ;
3405: CALL 3760 0 0
// set_shared_visions_and_alliances ;
3409: CALL 1466 0 0
// ResetFog ;
3413: CALL_OW 335
// prepare_sides ;
3417: CALL 3098 0 0
// ShowTimer ;
3421: CALL 5099 0 0
// music_nat := Side_Nations [ your_side ] ;
3425: LD_ADDR_OWVAR 71
3429: PUSH
3430: LD_EXP 29
3434: PUSH
3435: LD_OWVAR 2
3439: ARRAY
3440: ST_TO_ADDR
// SetSide ( amgeneral1 , GetSide ( FilterUnitsInArea ( Player1 , [ f_type , unit_human ] ) [ 1 ] ) ) ;
3441: LD_INT 2
3443: PPUSH
3444: LD_INT 34
3446: PPUSH
3447: LD_INT 21
3449: PUSH
3450: LD_INT 1
3452: PUSH
3453: EMPTY
3454: LIST
3455: LIST
3456: PPUSH
3457: CALL_OW 70
3461: PUSH
3462: LD_INT 1
3464: ARRAY
3465: PPUSH
3466: CALL_OW 255
3470: PPUSH
3471: CALL_OW 235
// SetSide ( amgeneral2 , GetSide ( FilterUnitsInArea ( Player2 , [ f_type , unit_human ] ) [ 1 ] ) ) ;
3475: LD_INT 3
3477: PPUSH
3478: LD_INT 35
3480: PPUSH
3481: LD_INT 21
3483: PUSH
3484: LD_INT 1
3486: PUSH
3487: EMPTY
3488: LIST
3489: LIST
3490: PPUSH
3491: CALL_OW 70
3495: PUSH
3496: LD_INT 1
3498: ARRAY
3499: PPUSH
3500: CALL_OW 255
3504: PPUSH
3505: CALL_OW 235
// SetSide ( argeneral1 , GetSide ( FilterUnitsInArea ( Player3 , [ f_type , unit_human ] ) [ 1 ] ) ) ;
3509: LD_INT 5
3511: PPUSH
3512: LD_INT 36
3514: PPUSH
3515: LD_INT 21
3517: PUSH
3518: LD_INT 1
3520: PUSH
3521: EMPTY
3522: LIST
3523: LIST
3524: PPUSH
3525: CALL_OW 70
3529: PUSH
3530: LD_INT 1
3532: ARRAY
3533: PPUSH
3534: CALL_OW 255
3538: PPUSH
3539: CALL_OW 235
// SetSide ( argeneral2 , GetSide ( FilterUnitsInArea ( Player4 , [ f_type , unit_human ] ) [ 1 ] ) ) ;
3543: LD_INT 6
3545: PPUSH
3546: LD_INT 37
3548: PPUSH
3549: LD_INT 21
3551: PUSH
3552: LD_INT 1
3554: PUSH
3555: EMPTY
3556: LIST
3557: LIST
3558: PPUSH
3559: CALL_OW 70
3563: PUSH
3564: LD_INT 1
3566: ARRAY
3567: PPUSH
3568: CALL_OW 255
3572: PPUSH
3573: CALL_OW 235
// SetSide ( rugeneral1 , GetSide ( FilterUnitsInArea ( Player5 , [ f_type , unit_human ] ) [ 1 ] ) ) ;
3577: LD_INT 8
3579: PPUSH
3580: LD_INT 38
3582: PPUSH
3583: LD_INT 21
3585: PUSH
3586: LD_INT 1
3588: PUSH
3589: EMPTY
3590: LIST
3591: LIST
3592: PPUSH
3593: CALL_OW 70
3597: PUSH
3598: LD_INT 1
3600: ARRAY
3601: PPUSH
3602: CALL_OW 255
3606: PPUSH
3607: CALL_OW 235
// SetSide ( rugeneral2 , GetSide ( FilterUnitsInArea ( Player6 , [ f_type , unit_human ] ) [ 1 ] ) ) ;
3611: LD_INT 9
3613: PPUSH
3614: LD_INT 39
3616: PPUSH
3617: LD_INT 21
3619: PUSH
3620: LD_INT 1
3622: PUSH
3623: EMPTY
3624: LIST
3625: LIST
3626: PPUSH
3627: CALL_OW 70
3631: PUSH
3632: LD_INT 1
3634: ARRAY
3635: PPUSH
3636: CALL_OW 255
3640: PPUSH
3641: CALL_OW 235
// SetSide ( algeneral1 , GetSide ( FilterUnitsInArea ( Player7 , [ f_type , unit_human ] ) [ 1 ] ) ) ;
3645: LD_INT 10
3647: PPUSH
3648: LD_INT 40
3650: PPUSH
3651: LD_INT 21
3653: PUSH
3654: LD_INT 1
3656: PUSH
3657: EMPTY
3658: LIST
3659: LIST
3660: PPUSH
3661: CALL_OW 70
3665: PUSH
3666: LD_INT 1
3668: ARRAY
3669: PPUSH
3670: CALL_OW 255
3674: PPUSH
3675: CALL_OW 235
// SetSide ( algeneral2 , GetSide ( FilterUnitsInArea ( Player8 , [ f_type , unit_human ] ) [ 1 ] ) ) ;
3679: LD_INT 12
3681: PPUSH
3682: LD_INT 41
3684: PPUSH
3685: LD_INT 21
3687: PUSH
3688: LD_INT 1
3690: PUSH
3691: EMPTY
3692: LIST
3693: LIST
3694: PPUSH
3695: CALL_OW 70
3699: PUSH
3700: LD_INT 1
3702: ARRAY
3703: PPUSH
3704: CALL_OW 255
3708: PPUSH
3709: CALL_OW 235
// CenterNowOnXY ( start_def [ Side_Positions [ your_side ] ] [ 1 ] , start_def [ Side_Positions [ your_side ] ] [ 2 ] ) ;
3713: LD_EXP 34
3717: PUSH
3718: LD_EXP 28
3722: PUSH
3723: LD_OWVAR 2
3727: ARRAY
3728: ARRAY
3729: PUSH
3730: LD_INT 1
3732: ARRAY
3733: PPUSH
3734: LD_EXP 34
3738: PUSH
3739: LD_EXP 28
3743: PUSH
3744: LD_OWVAR 2
3748: ARRAY
3749: ARRAY
3750: PUSH
3751: LD_INT 2
3753: ARRAY
3754: PPUSH
3755: CALL_OW 86
// end ; end_of_file
3759: END
// var respawn , inqueue ; export function init_respawning ; begin
3760: LD_INT 0
3762: PPUSH
// respawn := Rand ( 1 , 8 ) ;
3763: LD_ADDR_LOC 9
3767: PUSH
3768: LD_INT 1
3770: PPUSH
3771: LD_INT 8
3773: PPUSH
3774: CALL_OW 12
3778: ST_TO_ADDR
// inqueue := [ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ] ;
3779: LD_ADDR_LOC 10
3783: PUSH
3784: LD_INT 0
3786: PUSH
3787: LD_INT 0
3789: PUSH
3790: LD_INT 0
3792: PUSH
3793: LD_INT 0
3795: PUSH
3796: LD_INT 0
3798: PUSH
3799: LD_INT 0
3801: PUSH
3802: LD_INT 0
3804: PUSH
3805: LD_INT 0
3807: PUSH
3808: EMPTY
3809: LIST
3810: LIST
3811: LIST
3812: LIST
3813: LIST
3814: LIST
3815: LIST
3816: LIST
3817: ST_TO_ADDR
// end ;
3818: LD_VAR 0 1
3822: RET
// every 0 0$1 + 0 0$0.5 do var n , dep , aktresp ;
3823: GO 3825
3825: DISABLE
3826: LD_INT 0
3828: PPUSH
3829: PPUSH
3830: PPUSH
// begin if respawning_time_max = 0 then
3831: LD_EXP 19
3835: PUSH
3836: LD_INT 0
3838: EQUAL
3839: IFFALSE 3843
// exit ;
3841: GO 4248
// if respawn = 8 then
3843: LD_LOC 9
3847: PUSH
3848: LD_INT 8
3850: EQUAL
3851: IFFALSE 3863
// respawn := 1 else
3853: LD_ADDR_LOC 9
3857: PUSH
3858: LD_INT 1
3860: ST_TO_ADDR
3861: GO 3877
// respawn := respawn + 1 ;
3863: LD_ADDR_LOC 9
3867: PUSH
3868: LD_LOC 9
3872: PUSH
3873: LD_INT 1
3875: PLUS
3876: ST_TO_ADDR
// if Side_Positions [ respawn ] and not inqueue [ respawn ] then
3877: LD_EXP 28
3881: PUSH
3882: LD_LOC 9
3886: ARRAY
3887: PUSH
3888: LD_LOC 10
3892: PUSH
3893: LD_LOC 9
3897: ARRAY
3898: NOT
3899: AND
3900: IFFALSE 4247
// begin n := FilterAllUnits ( [ [ f_type , unit_human ] , [ f_side , respawn ] , f_not , [ f_nation , nation_nature ] ] ) ;
3902: LD_ADDR_VAR 0 1
3906: PUSH
3907: LD_INT 21
3909: PUSH
3910: LD_INT 1
3912: PUSH
3913: EMPTY
3914: LIST
3915: LIST
3916: PUSH
3917: LD_INT 22
3919: PUSH
3920: LD_LOC 9
3924: PUSH
3925: EMPTY
3926: LIST
3927: LIST
3928: PUSH
3929: LD_INT 3
3931: PUSH
3932: LD_INT 23
3934: PUSH
3935: LD_INT 0
3937: PUSH
3938: EMPTY
3939: LIST
3940: LIST
3941: PUSH
3942: EMPTY
3943: LIST
3944: LIST
3945: LIST
3946: LIST
3947: PPUSH
3948: CALL_OW 69
3952: ST_TO_ADDR
// if n < number_of_people then
3953: LD_VAR 0 1
3957: PUSH
3958: LD_EXP 10
3962: LESS
3963: IFFALSE 4244
// begin dep := FilterAllUnits ( [ [ f_type , unit_building ] , [ f_or , [ f_btype , b_depot ] , [ f_btype , b_warehouse ] ] , [ f_ok ] , [ f_side , respawn ] ] ) ;
3965: LD_ADDR_VAR 0 2
3969: PUSH
3970: LD_INT 21
3972: PUSH
3973: LD_INT 3
3975: PUSH
3976: EMPTY
3977: LIST
3978: LIST
3979: PUSH
3980: LD_INT 2
3982: PUSH
3983: LD_INT 30
3985: PUSH
3986: LD_INT 0
3988: PUSH
3989: EMPTY
3990: LIST
3991: LIST
3992: PUSH
3993: LD_INT 30
3995: PUSH
3996: LD_INT 1
3998: PUSH
3999: EMPTY
4000: LIST
4001: LIST
4002: PUSH
4003: EMPTY
4004: LIST
4005: LIST
4006: LIST
4007: PUSH
4008: LD_INT 50
4010: PUSH
4011: EMPTY
4012: LIST
4013: PUSH
4014: LD_INT 22
4016: PUSH
4017: LD_LOC 9
4021: PUSH
4022: EMPTY
4023: LIST
4024: LIST
4025: PUSH
4026: EMPTY
4027: LIST
4028: LIST
4029: LIST
4030: LIST
4031: PPUSH
4032: CALL_OW 69
4036: ST_TO_ADDR
// if dep then
4037: LD_VAR 0 2
4041: IFFALSE 4241
// begin aktresp := respawn ;
4043: LD_ADDR_VAR 0 3
4047: PUSH
4048: LD_LOC 9
4052: ST_TO_ADDR
// inqueue := Replace ( inqueue , aktresp , true ) ;
4053: LD_ADDR_LOC 10
4057: PUSH
4058: LD_LOC 10
4062: PPUSH
4063: LD_VAR 0 3
4067: PPUSH
4068: LD_INT 1
4070: PPUSH
4071: CALL_OW 1
4075: ST_TO_ADDR
// enable ;
4076: ENABLE
// wait ( rand ( respawning_time_min , respawning_time_max ) ) ;
4077: LD_EXP 18
4081: PPUSH
4082: LD_EXP 19
4086: PPUSH
4087: CALL_OW 12
4091: PPUSH
4092: CALL_OW 67
// inqueue := Replace ( inqueue , aktresp , false ) ;
4096: LD_ADDR_LOC 10
4100: PUSH
4101: LD_LOC 10
4105: PPUSH
4106: LD_VAR 0 3
4110: PPUSH
4111: LD_INT 0
4113: PPUSH
4114: CALL_OW 1
4118: ST_TO_ADDR
// hc_name :=  ;
4119: LD_ADDR_OWVAR 26
4123: PUSH
4124: LD_STRING 
4126: ST_TO_ADDR
// hc_importance := 0 ;
4127: LD_ADDR_OWVAR 32
4131: PUSH
4132: LD_INT 0
4134: ST_TO_ADDR
// PrepareHuman ( 0 , 0 , skill_level div 2 ) ;
4135: LD_INT 0
4137: PPUSH
4138: LD_INT 0
4140: PPUSH
4141: LD_EXP 11
4145: PUSH
4146: LD_INT 2
4148: DIV
4149: PPUSH
4150: CALL_OW 380
// uc_nation := Side_Nations [ aktresp ] ;
4154: LD_ADDR_OWVAR 21
4158: PUSH
4159: LD_EXP 29
4163: PUSH
4164: LD_VAR 0 3
4168: ARRAY
4169: ST_TO_ADDR
// uc_side := aktresp ;
4170: LD_ADDR_OWVAR 20
4174: PUSH
4175: LD_VAR 0 3
4179: ST_TO_ADDR
// dep := dep [ Rand ( 1 , dep ) ] ;
4180: LD_ADDR_VAR 0 2
4184: PUSH
4185: LD_VAR 0 2
4189: PUSH
4190: LD_INT 1
4192: PPUSH
4193: LD_VAR 0 2
4197: PPUSH
4198: CALL_OW 12
4202: ARRAY
4203: ST_TO_ADDR
// PlaceUnitXYR ( CreateHuman , GetX ( dep ) , GetY ( dep ) , 7 , true ) ;
4204: CALL_OW 44
4208: PPUSH
4209: LD_VAR 0 2
4213: PPUSH
4214: CALL_OW 250
4218: PPUSH
4219: LD_VAR 0 2
4223: PPUSH
4224: CALL_OW 251
4228: PPUSH
4229: LD_INT 7
4231: PPUSH
4232: LD_INT 1
4234: PPUSH
4235: CALL_OW 50
// end else
4239: GO 4242
// enable ;
4241: ENABLE
// end else
4242: GO 4245
// enable ;
4244: ENABLE
// end else
4245: GO 4248
// enable ;
4247: ENABLE
// end ; end_of_file
4248: PPOPN 3
4250: END
// every 1 1$0 + 0 0$0.3 marked 10 do
4251: GO 4253
4253: DISABLE
// begin CreateCratesAnywhere ( Rand ( 4 , 5 ) , true ) ;
4254: LD_INT 4
4256: PPUSH
4257: LD_INT 5
4259: PPUSH
4260: CALL_OW 12
4264: PPUSH
4265: LD_INT 1
4267: PPUSH
4268: CALL_OW 57
// enable ;
4272: ENABLE
// end ;
4273: END
// every 0 0$1 + 0 0$0.6 marked 10 do var i , amount ;
4274: GO 4276
4276: DISABLE
4277: LD_INT 0
4279: PPUSH
4280: PPUSH
// begin case tick of 1 .. 1 1$0 :
4281: LD_OWVAR 1
4285: PUSH
4286: LD_INT 1
4288: DOUBLE
4289: GREATEREQUAL
4290: IFFALSE 4298
4292: LD_INT 2100
4294: DOUBLE
4295: LESSEQUAL
4296: IFTRUE 4300
4298: GO 4328
4300: POP
// Wait ( shipments_density / 100 * Rand ( 0 0$10 , 0 0$30 ) ) ; 1 1$0 + 1 .. 5 5$0 :
4301: LD_EXP 14
4305: PUSH
4306: LD_INT 100
4308: DIVREAL
4309: PUSH
4310: LD_INT 350
4312: PPUSH
4313: LD_INT 1050
4315: PPUSH
4316: CALL_OW 12
4320: MUL
4321: PPUSH
4322: CALL_OW 67
4326: GO 4630
4328: LD_INT 2100
4330: PUSH
4331: LD_INT 1
4333: PLUS
4334: DOUBLE
4335: GREATEREQUAL
4336: IFFALSE 4344
4338: LD_INT 10500
4340: DOUBLE
4341: LESSEQUAL
4342: IFTRUE 4346
4344: GO 4374
4346: POP
// Wait ( shipments_density / 100 * Rand ( 0 0$30 , 0 0$45 ) ) ; 5 5$0 + 1 .. 10 10$0 :
4347: LD_EXP 14
4351: PUSH
4352: LD_INT 100
4354: DIVREAL
4355: PUSH
4356: LD_INT 1050
4358: PPUSH
4359: LD_INT 1575
4361: PPUSH
4362: CALL_OW 12
4366: MUL
4367: PPUSH
4368: CALL_OW 67
4372: GO 4630
4374: LD_INT 10500
4376: PUSH
4377: LD_INT 1
4379: PLUS
4380: DOUBLE
4381: GREATEREQUAL
4382: IFFALSE 4390
4384: LD_INT 21000
4386: DOUBLE
4387: LESSEQUAL
4388: IFTRUE 4392
4390: GO 4420
4392: POP
// Wait ( shipments_density / 100 * Rand ( 0 0$45 , 1 1$0 ) ) ; 10 10$0 + 1 .. 20 20$0 :
4393: LD_EXP 14
4397: PUSH
4398: LD_INT 100
4400: DIVREAL
4401: PUSH
4402: LD_INT 1575
4404: PPUSH
4405: LD_INT 2100
4407: PPUSH
4408: CALL_OW 12
4412: MUL
4413: PPUSH
4414: CALL_OW 67
4418: GO 4630
4420: LD_INT 21000
4422: PUSH
4423: LD_INT 1
4425: PLUS
4426: DOUBLE
4427: GREATEREQUAL
4428: IFFALSE 4436
4430: LD_INT 42000
4432: DOUBLE
4433: LESSEQUAL
4434: IFTRUE 4438
4436: GO 4466
4438: POP
// Wait ( shipments_density / 100 * Rand ( 1 1$0 , 1 1$15 ) ) ; 20 20$0 + 1 .. 30 30$0 :
4439: LD_EXP 14
4443: PUSH
4444: LD_INT 100
4446: DIVREAL
4447: PUSH
4448: LD_INT 2100
4450: PPUSH
4451: LD_INT 2625
4453: PPUSH
4454: CALL_OW 12
4458: MUL
4459: PPUSH
4460: CALL_OW 67
4464: GO 4630
4466: LD_INT 42000
4468: PUSH
4469: LD_INT 1
4471: PLUS
4472: DOUBLE
4473: GREATEREQUAL
4474: IFFALSE 4482
4476: LD_INT 63000
4478: DOUBLE
4479: LESSEQUAL
4480: IFTRUE 4484
4482: GO 4512
4484: POP
// Wait ( shipments_density / 100 * Rand ( 1 1$15 , 1 1$30 ) ) ; 30 30$0 + 1 .. 50 50$0 :
4485: LD_EXP 14
4489: PUSH
4490: LD_INT 100
4492: DIVREAL
4493: PUSH
4494: LD_INT 2625
4496: PPUSH
4497: LD_INT 3150
4499: PPUSH
4500: CALL_OW 12
4504: MUL
4505: PPUSH
4506: CALL_OW 67
4510: GO 4630
4512: LD_INT 63000
4514: PUSH
4515: LD_INT 1
4517: PLUS
4518: DOUBLE
4519: GREATEREQUAL
4520: IFFALSE 4528
4522: LD_INT 105000
4524: DOUBLE
4525: LESSEQUAL
4526: IFTRUE 4530
4528: GO 4558
4530: POP
// Wait ( shipments_density / 100 * Rand ( 1 1$30 , 1 1$45 ) ) ; 50 50$0 + 1 .. 300 300$0 :
4531: LD_EXP 14
4535: PUSH
4536: LD_INT 100
4538: DIVREAL
4539: PUSH
4540: LD_INT 3150
4542: PPUSH
4543: LD_INT 3675
4545: PPUSH
4546: CALL_OW 12
4550: MUL
4551: PPUSH
4552: CALL_OW 67
4556: GO 4630
4558: LD_INT 105000
4560: PUSH
4561: LD_INT 1
4563: PLUS
4564: DOUBLE
4565: GREATEREQUAL
4566: IFFALSE 4574
4568: LD_INT 630000
4570: DOUBLE
4571: LESSEQUAL
4572: IFTRUE 4576
4574: GO 4604
4576: POP
// Wait ( shipments_density / 100 * Rand ( 1 1$45 , 2 2$0 ) ) ; else
4577: LD_EXP 14
4581: PUSH
4582: LD_INT 100
4584: DIVREAL
4585: PUSH
4586: LD_INT 3675
4588: PPUSH
4589: LD_INT 4200
4591: PPUSH
4592: CALL_OW 12
4596: MUL
4597: PPUSH
4598: CALL_OW 67
4602: GO 4630
4604: POP
// Wait ( shipments_density / 100 * Rand ( 2 2$0 , 2 2$30 ) ) ; end ;
4605: LD_EXP 14
4609: PUSH
4610: LD_INT 100
4612: DIVREAL
4613: PUSH
4614: LD_INT 4200
4616: PPUSH
4617: LD_INT 5250
4619: PPUSH
4620: CALL_OW 12
4624: MUL
4625: PPUSH
4626: CALL_OW 67
// amount := Rand ( 3 , 5 ) ;
4630: LD_ADDR_VAR 0 2
4634: PUSH
4635: LD_INT 3
4637: PPUSH
4638: LD_INT 5
4640: PPUSH
4641: CALL_OW 12
4645: ST_TO_ADDR
// for i in ( Side_Positions diff [ 0 ] ) do
4646: LD_ADDR_VAR 0 1
4650: PUSH
4651: LD_EXP 28
4655: PUSH
4656: LD_INT 0
4658: PUSH
4659: EMPTY
4660: LIST
4661: DIFF
4662: PUSH
4663: FOR_IN
4664: IFFALSE 4713
// CreateCratesXYR ( amount , start_def [ i ] [ 1 ] , start_def [ i ] [ 2 ] , 20 , true ) ;
4666: LD_VAR 0 2
4670: PPUSH
4671: LD_EXP 34
4675: PUSH
4676: LD_VAR 0 1
4680: ARRAY
4681: PUSH
4682: LD_INT 1
4684: ARRAY
4685: PPUSH
4686: LD_EXP 34
4690: PUSH
4691: LD_VAR 0 1
4695: ARRAY
4696: PUSH
4697: LD_INT 2
4699: ARRAY
4700: PPUSH
4701: LD_INT 20
4703: PPUSH
4704: LD_INT 1
4706: PPUSH
4707: CALL_OW 56
4711: GO 4663
4713: POP
4714: POP
// enable ;
4715: ENABLE
// end ; end_of_file
4716: PPOPN 2
4718: END
// on BuildingStarted ( b , u ) do begin if GetBType ( b ) in [ b_depot , b_warehouse ] then
4719: LD_VAR 0 1
4723: PPUSH
4724: CALL_OW 266
4728: PUSH
4729: LD_INT 0
4731: PUSH
4732: LD_INT 1
4734: PUSH
4735: EMPTY
4736: LIST
4737: LIST
4738: IN
4739: IFFALSE 4764
// SetBName ( b , @ & GetSide ( b ) ) ;
4741: LD_VAR 0 1
4745: PPUSH
4746: LD_STRING @
4748: PUSH
4749: LD_VAR 0 1
4753: PPUSH
4754: CALL_OW 255
4758: STR
4759: PPUSH
4760: CALL_OW 500
// end ;
4764: PPOPN 2
4766: END
// on BuildingCaptured ( b , o , e ) do begin if GetBType ( b ) in [ b_depot , b_warehouse ] then
4767: LD_VAR 0 1
4771: PPUSH
4772: CALL_OW 266
4776: PUSH
4777: LD_INT 0
4779: PUSH
4780: LD_INT 1
4782: PUSH
4783: EMPTY
4784: LIST
4785: LIST
4786: IN
4787: IFFALSE 4812
// SetBName ( b , @ & GetSide ( b ) ) ;
4789: LD_VAR 0 1
4793: PPUSH
4794: LD_STRING @
4796: PUSH
4797: LD_VAR 0 1
4801: PPUSH
4802: CALL_OW 255
4806: STR
4807: PPUSH
4808: CALL_OW 500
// end ; end_of_file
4812: PPOPN 3
4814: END
// every 0 0$2 do
4815: GO 4817
4817: DISABLE
// begin end ;
4818: END
// every 0 0$3 do
4819: GO 4821
4821: DISABLE
// begin if GetSide ( rugeneral1 ) = 0 then
4822: LD_INT 8
4824: PPUSH
4825: CALL_OW 255
4829: PUSH
4830: LD_INT 0
4832: EQUAL
4833: IFFALSE 4842
// begin RemoveUnit ( rugeneral1 ) ;
4835: LD_INT 8
4837: PPUSH
4838: CALL_OW 64
// end ; if GetSide ( rugeneral2 ) = 0 then
4842: LD_INT 9
4844: PPUSH
4845: CALL_OW 255
4849: PUSH
4850: LD_INT 0
4852: EQUAL
4853: IFFALSE 4862
// begin RemoveUnit ( rugeneral2 ) ;
4855: LD_INT 9
4857: PPUSH
4858: CALL_OW 64
// end ; if GetSide ( amgeneral1 ) = 0 then
4862: LD_INT 2
4864: PPUSH
4865: CALL_OW 255
4869: PUSH
4870: LD_INT 0
4872: EQUAL
4873: IFFALSE 4882
// begin RemoveUnit ( amgeneral1 ) ;
4875: LD_INT 2
4877: PPUSH
4878: CALL_OW 64
// end ; if GetSide ( amgeneral2 ) = 0 then
4882: LD_INT 3
4884: PPUSH
4885: CALL_OW 255
4889: PUSH
4890: LD_INT 0
4892: EQUAL
4893: IFFALSE 4902
// begin RemoveUnit ( amgeneral2 ) ;
4895: LD_INT 3
4897: PPUSH
4898: CALL_OW 64
// end ; if GetSide ( argeneral1 ) = 0 then
4902: LD_INT 5
4904: PPUSH
4905: CALL_OW 255
4909: PUSH
4910: LD_INT 0
4912: EQUAL
4913: IFFALSE 4922
// begin RemoveUnit ( argeneral1 ) ;
4915: LD_INT 5
4917: PPUSH
4918: CALL_OW 64
// end ; if GetSide ( argeneral2 ) = 0 then
4922: LD_INT 6
4924: PPUSH
4925: CALL_OW 255
4929: PUSH
4930: LD_INT 0
4932: EQUAL
4933: IFFALSE 4942
// begin RemoveUnit ( argeneral2 ) ;
4935: LD_INT 6
4937: PPUSH
4938: CALL_OW 64
// end ; if GetSide ( algeneral1 ) = 0 then
4942: LD_INT 10
4944: PPUSH
4945: CALL_OW 255
4949: PUSH
4950: LD_INT 0
4952: EQUAL
4953: IFFALSE 4962
// begin RemoveUnit ( algeneral1 ) ;
4955: LD_INT 10
4957: PPUSH
4958: CALL_OW 64
// end ; if GetSide ( algeneral2 ) = 0 then
4962: LD_INT 12
4964: PPUSH
4965: CALL_OW 255
4969: PUSH
4970: LD_INT 0
4972: EQUAL
4973: IFFALSE 4982
// begin RemoveUnit ( algeneral2 ) ;
4975: LD_INT 12
4977: PPUSH
4978: CALL_OW 64
// end ; end ;
4982: END
// function EnableSibFiss ; var i ; begin
4983: LD_INT 0
4985: PPUSH
4986: PPUSH
// for i := 1 to 8 do
4987: LD_ADDR_VAR 0 2
4991: PUSH
4992: DOUBLE
4993: LD_INT 1
4995: DEC
4996: ST_TO_ADDR
4997: LD_INT 8
4999: PUSH
5000: FOR_TO
5001: IFFALSE 5032
// if Side_Positions [ i ] then
5003: LD_EXP 28
5007: PUSH
5008: LD_VAR 0 2
5012: ARRAY
5013: IFFALSE 5030
// SetTech ( tech_SibFiss , i , state_enabled ) ;
5015: LD_INT 25
5017: PPUSH
5018: LD_VAR 0 2
5022: PPUSH
5023: LD_INT 1
5025: PPUSH
5026: CALL_OW 322
5030: GO 5000
5032: POP
5033: POP
// end ;
5034: LD_VAR 0 1
5038: RET
// every 0 0$4 do
5039: GO 5041
5041: DISABLE
// begin if siberite_bomb = 1 then
5042: LD_EXP 41
5046: PUSH
5047: LD_INT 1
5049: EQUAL
5050: IFFALSE 5056
// begin EnableSibFiss ;
5052: CALL 4983 0 0
// end ; if siberite_bomb = 2 then
5056: LD_EXP 41
5060: PUSH
5061: LD_INT 2
5063: EQUAL
5064: IFFALSE 5077
// begin wait ( 30 30$0 ) ;
5066: LD_INT 63000
5068: PPUSH
5069: CALL_OW 67
// EnableSibFiss ;
5073: CALL 4983 0 0
// end ; if siberite_bomb = 3 then
5077: LD_EXP 41
5081: PUSH
5082: LD_INT 3
5084: EQUAL
5085: IFFALSE 5098
// begin wait ( 60 60$0 ) ;
5087: LD_INT 126000
5089: PPUSH
5090: CALL_OW 67
// EnableSibFiss ;
5094: CALL 4983 0 0
// end ; end ; end_of_file
5098: END
// export ExtraStrings ; export function ShowTimer ; var AllStrings ; begin
5099: LD_INT 0
5101: PPUSH
5102: PPUSH
// AllStrings := [ #Multi1x1-Time , tick ] ;
5103: LD_ADDR_VAR 0 2
5107: PUSH
5108: LD_STRING #Multi1x1-Time
5110: PUSH
5111: LD_OWVAR 1
5115: PUSH
5116: EMPTY
5117: LIST
5118: LIST
5119: ST_TO_ADDR
// if ( ExtraStrings ) then
5120: LD_EXP 42
5124: IFFALSE 5146
// AllStrings := AllStrings ^  ^ ExtraStrings ;
5126: LD_ADDR_VAR 0 2
5130: PUSH
5131: LD_VAR 0 2
5135: PUSH
5136: LD_STRING 
5138: ADD
5139: PUSH
5140: LD_EXP 42
5144: ADD
5145: ST_TO_ADDR
// Display_Strings := AllStrings ;
5146: LD_ADDR_OWVAR 47
5150: PUSH
5151: LD_VAR 0 2
5155: ST_TO_ADDR
// end ;
5156: LD_VAR 0 1
5160: RET
// every 0 0$1 do
5161: GO 5163
5163: DISABLE
// begin ShowTimer ;
5164: CALL 5099 0 0
// enable ;
5168: ENABLE
// end ; end_of_file
5169: END
// every 0 0$3 do
5170: GO 5172
5172: DISABLE
// begin InitHack ( 3 ) ;
5173: LD_INT 3
5175: PPUSH
5176: CALL 5181 0 1
// end ;
5180: END
// export vx_limit , vx_capture , vx_list , us_hack ; export function InitHack ( limit ) ; var i , tmp ; begin
5181: LD_INT 0
5183: PPUSH
5184: PPUSH
5185: PPUSH
// us_hack = 99 ;
5186: LD_ADDR_EXP 46
5190: PUSH
5191: LD_INT 99
5193: ST_TO_ADDR
// vx_list = [ ] ;
5194: LD_ADDR_EXP 45
5198: PUSH
5199: EMPTY
5200: ST_TO_ADDR
// vx_limit = limit ;
5201: LD_ADDR_EXP 43
5205: PUSH
5206: LD_VAR 0 1
5210: ST_TO_ADDR
// vx_capture = [ ] ;
5211: LD_ADDR_EXP 44
5215: PUSH
5216: EMPTY
5217: ST_TO_ADDR
// tmp := FilterAllUnits ( [ f_weapon , us_hack ] ) ;
5218: LD_ADDR_VAR 0 4
5222: PUSH
5223: LD_INT 34
5225: PUSH
5226: LD_EXP 46
5230: PUSH
5231: EMPTY
5232: LIST
5233: LIST
5234: PPUSH
5235: CALL_OW 69
5239: ST_TO_ADDR
// for i = 1 to tmp do
5240: LD_ADDR_VAR 0 3
5244: PUSH
5245: DOUBLE
5246: LD_INT 1
5248: DEC
5249: ST_TO_ADDR
5250: LD_VAR 0 4
5254: PUSH
5255: FOR_TO
5256: IFFALSE 5323
// begin vx_list := vx_list ^ [ [ tmp [ i ] , [ ] ] ] ;
5258: LD_ADDR_EXP 45
5262: PUSH
5263: LD_EXP 45
5267: PUSH
5268: LD_VAR 0 4
5272: PUSH
5273: LD_VAR 0 3
5277: ARRAY
5278: PUSH
5279: EMPTY
5280: PUSH
5281: EMPTY
5282: LIST
5283: LIST
5284: PUSH
5285: EMPTY
5286: LIST
5287: ADD
5288: ST_TO_ADDR
// vx_capture := vx_capture ^ [ [ tmp [ i ] , 0 ] ] ;
5289: LD_ADDR_EXP 44
5293: PUSH
5294: LD_EXP 44
5298: PUSH
5299: LD_VAR 0 4
5303: PUSH
5304: LD_VAR 0 3
5308: ARRAY
5309: PUSH
5310: LD_INT 0
5312: PUSH
5313: EMPTY
5314: LIST
5315: LIST
5316: PUSH
5317: EMPTY
5318: LIST
5319: ADD
5320: ST_TO_ADDR
// end ;
5321: GO 5255
5323: POP
5324: POP
// end ;
5325: LD_VAR 0 2
5329: RET
// export function AddVeh ( veh , e , s ) ; var i , tmp , tmp2 ; begin
5330: LD_INT 0
5332: PPUSH
5333: PPUSH
5334: PPUSH
5335: PPUSH
// for i = 1 to vx_list do
5336: LD_ADDR_VAR 0 5
5340: PUSH
5341: DOUBLE
5342: LD_INT 1
5344: DEC
5345: ST_TO_ADDR
5346: LD_EXP 45
5350: PUSH
5351: FOR_TO
5352: IFFALSE 5492
// if vx_list [ i ] [ 1 ] = veh then
5354: LD_EXP 45
5358: PUSH
5359: LD_VAR 0 5
5363: ARRAY
5364: PUSH
5365: LD_INT 1
5367: ARRAY
5368: PUSH
5369: LD_VAR 0 1
5373: EQUAL
5374: IFFALSE 5490
// begin tmp2 := Insert ( vx_list [ i ] [ 2 ] , vx_list [ i ] [ 2 ] + 1 , [ e , s ] ) ;
5376: LD_ADDR_VAR 0 7
5380: PUSH
5381: LD_EXP 45
5385: PUSH
5386: LD_VAR 0 5
5390: ARRAY
5391: PUSH
5392: LD_INT 2
5394: ARRAY
5395: PPUSH
5396: LD_EXP 45
5400: PUSH
5401: LD_VAR 0 5
5405: ARRAY
5406: PUSH
5407: LD_INT 2
5409: ARRAY
5410: PUSH
5411: LD_INT 1
5413: PLUS
5414: PPUSH
5415: LD_VAR 0 2
5419: PUSH
5420: LD_VAR 0 3
5424: PUSH
5425: EMPTY
5426: LIST
5427: LIST
5428: PPUSH
5429: CALL_OW 2
5433: ST_TO_ADDR
// tmp := Replace ( vx_list [ i ] , 2 , tmp2 ) ;
5434: LD_ADDR_VAR 0 6
5438: PUSH
5439: LD_EXP 45
5443: PUSH
5444: LD_VAR 0 5
5448: ARRAY
5449: PPUSH
5450: LD_INT 2
5452: PPUSH
5453: LD_VAR 0 7
5457: PPUSH
5458: CALL_OW 1
5462: ST_TO_ADDR
// vx_list := Replace ( vx_list , i , tmp ) ;
5463: LD_ADDR_EXP 45
5467: PUSH
5468: LD_EXP 45
5472: PPUSH
5473: LD_VAR 0 5
5477: PPUSH
5478: LD_VAR 0 6
5482: PPUSH
5483: CALL_OW 1
5487: ST_TO_ADDR
// break ;
5488: GO 5492
// end ;
5490: GO 5351
5492: POP
5493: POP
// end ;
5494: LD_VAR 0 4
5498: RET
// export function ChangeCapture ( veh , m ) ; var i , tmp ; begin
5499: LD_INT 0
5501: PPUSH
5502: PPUSH
5503: PPUSH
// for i = 1 to vx_capture do
5504: LD_ADDR_VAR 0 4
5508: PUSH
5509: DOUBLE
5510: LD_INT 1
5512: DEC
5513: ST_TO_ADDR
5514: LD_EXP 44
5518: PUSH
5519: FOR_TO
5520: IFFALSE 5618
// if vx_capture [ i ] [ 1 ] = veh then
5522: LD_EXP 44
5526: PUSH
5527: LD_VAR 0 4
5531: ARRAY
5532: PUSH
5533: LD_INT 1
5535: ARRAY
5536: PUSH
5537: LD_VAR 0 1
5541: EQUAL
5542: IFFALSE 5616
// begin tmp := Replace ( vx_capture [ i ] , 2 , vx_capture [ i ] [ 2 ] + ( m ) ) ;
5544: LD_ADDR_VAR 0 5
5548: PUSH
5549: LD_EXP 44
5553: PUSH
5554: LD_VAR 0 4
5558: ARRAY
5559: PPUSH
5560: LD_INT 2
5562: PPUSH
5563: LD_EXP 44
5567: PUSH
5568: LD_VAR 0 4
5572: ARRAY
5573: PUSH
5574: LD_INT 2
5576: ARRAY
5577: PUSH
5578: LD_VAR 0 2
5582: PLUS
5583: PPUSH
5584: CALL_OW 1
5588: ST_TO_ADDR
// vx_capture := Replace ( vx_capture , i , tmp ) ;
5589: LD_ADDR_EXP 44
5593: PUSH
5594: LD_EXP 44
5598: PPUSH
5599: LD_VAR 0 4
5603: PPUSH
5604: LD_VAR 0 5
5608: PPUSH
5609: CALL_OW 1
5613: ST_TO_ADDR
// break ;
5614: GO 5618
// end ;
5616: GO 5519
5618: POP
5619: POP
// end ;
5620: LD_VAR 0 3
5624: RET
// export function DisplayHacks ( veh ) ; var i , tmp ; begin
5625: LD_INT 0
5627: PPUSH
5628: PPUSH
5629: PPUSH
// result := false ;
5630: LD_ADDR_VAR 0 2
5634: PUSH
5635: LD_INT 0
5637: ST_TO_ADDR
// for i = 1 to vx_capture do
5638: LD_ADDR_VAR 0 3
5642: PUSH
5643: DOUBLE
5644: LD_INT 1
5646: DEC
5647: ST_TO_ADDR
5648: LD_EXP 44
5652: PUSH
5653: FOR_TO
5654: IFFALSE 5702
// if vx_capture [ i ] [ 1 ] = veh then
5656: LD_EXP 44
5660: PUSH
5661: LD_VAR 0 3
5665: ARRAY
5666: PUSH
5667: LD_INT 1
5669: ARRAY
5670: PUSH
5671: LD_VAR 0 1
5675: EQUAL
5676: IFFALSE 5700
// begin result := vx_capture [ i ] [ 2 ] ;
5678: LD_ADDR_VAR 0 2
5682: PUSH
5683: LD_EXP 44
5687: PUSH
5688: LD_VAR 0 3
5692: ARRAY
5693: PUSH
5694: LD_INT 2
5696: ARRAY
5697: ST_TO_ADDR
// break ;
5698: GO 5702
// end ;
5700: GO 5653
5702: POP
5703: POP
// SetUnitDisplayNumber ( veh , result ) ;
5704: LD_VAR 0 1
5708: PPUSH
5709: LD_VAR 0 2
5713: PPUSH
5714: CALL_OW 505
// end ;
5718: LD_VAR 0 2
5722: RET
// export function GetValue ( veh , m ) ; var i ; begin
5723: LD_INT 0
5725: PPUSH
5726: PPUSH
// result := false ;
5727: LD_ADDR_VAR 0 3
5731: PUSH
5732: LD_INT 0
5734: ST_TO_ADDR
// if not veh then
5735: LD_VAR 0 1
5739: NOT
5740: IFFALSE 5746
// exit else
5742: GO 5906
5744: GO 5906
// begin case m of list :
5746: LD_VAR 0 2
5750: PUSH
5751: LD_STRING list
5753: DOUBLE
5754: EQUAL
5755: IFTRUE 5759
5757: GO 5828
5759: POP
// begin for i = 1 to vx_list do
5760: LD_ADDR_VAR 0 4
5764: PUSH
5765: DOUBLE
5766: LD_INT 1
5768: DEC
5769: ST_TO_ADDR
5770: LD_EXP 45
5774: PUSH
5775: FOR_TO
5776: IFFALSE 5824
// if vx_list [ i ] [ 1 ] = veh then
5778: LD_EXP 45
5782: PUSH
5783: LD_VAR 0 4
5787: ARRAY
5788: PUSH
5789: LD_INT 1
5791: ARRAY
5792: PUSH
5793: LD_VAR 0 1
5797: EQUAL
5798: IFFALSE 5822
// begin result := vx_list [ i ] [ 2 ] ;
5800: LD_ADDR_VAR 0 3
5804: PUSH
5805: LD_EXP 45
5809: PUSH
5810: LD_VAR 0 4
5814: ARRAY
5815: PUSH
5816: LD_INT 2
5818: ARRAY
5819: ST_TO_ADDR
// break ;
5820: GO 5824
// end ;
5822: GO 5775
5824: POP
5825: POP
// end ; capt :
5826: GO 5906
5828: LD_STRING capt
5830: DOUBLE
5831: EQUAL
5832: IFTRUE 5836
5834: GO 5905
5836: POP
// begin for i = 1 to vx_capture do
5837: LD_ADDR_VAR 0 4
5841: PUSH
5842: DOUBLE
5843: LD_INT 1
5845: DEC
5846: ST_TO_ADDR
5847: LD_EXP 44
5851: PUSH
5852: FOR_TO
5853: IFFALSE 5901
// if vx_capture [ i ] [ 1 ] = veh then
5855: LD_EXP 44
5859: PUSH
5860: LD_VAR 0 4
5864: ARRAY
5865: PUSH
5866: LD_INT 1
5868: ARRAY
5869: PUSH
5870: LD_VAR 0 1
5874: EQUAL
5875: IFFALSE 5899
// begin result := vx_capture [ i ] [ 2 ] ;
5877: LD_ADDR_VAR 0 3
5881: PUSH
5882: LD_EXP 44
5886: PUSH
5887: LD_VAR 0 4
5891: ARRAY
5892: PUSH
5893: LD_INT 2
5895: ARRAY
5896: ST_TO_ADDR
// break ;
5897: GO 5901
// end ;
5899: GO 5852
5901: POP
5902: POP
// end ; end ;
5903: GO 5906
5905: POP
// end ; end ;
5906: LD_VAR 0 3
5910: RET
// every 0 0$01 do var i , j , e , vehx , old_side ;
5911: GO 5913
5913: DISABLE
5914: LD_INT 0
5916: PPUSH
5917: PPUSH
5918: PPUSH
5919: PPUSH
5920: PPUSH
// begin enable ;
5921: ENABLE
// vehx = FilterAllUnits ( [ f_weapon , us_hack ] ) ;
5922: LD_ADDR_VAR 0 4
5926: PUSH
5927: LD_INT 34
5929: PUSH
5930: LD_EXP 46
5934: PUSH
5935: EMPTY
5936: LIST
5937: LIST
5938: PPUSH
5939: CALL_OW 69
5943: ST_TO_ADDR
// for j = 1 to vehx do
5944: LD_ADDR_VAR 0 2
5948: PUSH
5949: DOUBLE
5950: LD_INT 1
5952: DEC
5953: ST_TO_ADDR
5954: LD_VAR 0 4
5958: PUSH
5959: FOR_TO
5960: IFFALSE 6225
// begin e = FilterAllUnits ( [ [ f_enemy , GetSide ( vehx [ j ] ) ] , [ f_control , control_computer ] , [ f_not , [ f_weapon , us_hack ] ] ] ) ;
5962: LD_ADDR_VAR 0 3
5966: PUSH
5967: LD_INT 81
5969: PUSH
5970: LD_VAR 0 4
5974: PUSH
5975: LD_VAR 0 2
5979: ARRAY
5980: PPUSH
5981: CALL_OW 255
5985: PUSH
5986: EMPTY
5987: LIST
5988: LIST
5989: PUSH
5990: LD_INT 33
5992: PUSH
5993: LD_INT 3
5995: PUSH
5996: EMPTY
5997: LIST
5998: LIST
5999: PUSH
6000: LD_INT 3
6002: PUSH
6003: LD_INT 34
6005: PUSH
6006: LD_EXP 46
6010: PUSH
6011: EMPTY
6012: LIST
6013: LIST
6014: PUSH
6015: EMPTY
6016: LIST
6017: LIST
6018: PUSH
6019: EMPTY
6020: LIST
6021: LIST
6022: LIST
6023: PPUSH
6024: CALL_OW 69
6028: ST_TO_ADDR
// if not e then
6029: LD_VAR 0 3
6033: NOT
6034: IFFALSE 6038
// continue ;
6036: GO 5959
// i := NearestUnitToUnit ( e , vehx [ j ] ) ;
6038: LD_ADDR_VAR 0 1
6042: PUSH
6043: LD_VAR 0 3
6047: PPUSH
6048: LD_VAR 0 4
6052: PUSH
6053: LD_VAR 0 2
6057: ARRAY
6058: PPUSH
6059: CALL_OW 74
6063: ST_TO_ADDR
// if GetDistUnits ( vehx [ j ] , i ) <= 12 and GetValue ( vehx [ j ] , capt ) < vx_limit then
6064: LD_VAR 0 4
6068: PUSH
6069: LD_VAR 0 2
6073: ARRAY
6074: PPUSH
6075: LD_VAR 0 1
6079: PPUSH
6080: CALL_OW 296
6084: PUSH
6085: LD_INT 12
6087: LESSEQUAL
6088: PUSH
6089: LD_VAR 0 4
6093: PUSH
6094: LD_VAR 0 2
6098: ARRAY
6099: PPUSH
6100: LD_STRING capt
6102: PPUSH
6103: CALL 5723 0 2
6107: PUSH
6108: LD_EXP 43
6112: LESS
6113: AND
6114: IFFALSE 6223
// begin ChangeCapture ( vehx [ j ] , 1 ) ;
6116: LD_VAR 0 4
6120: PUSH
6121: LD_VAR 0 2
6125: ARRAY
6126: PPUSH
6127: LD_INT 1
6129: PPUSH
6130: CALL 5499 0 2
// old_side = GetSide ( i ) ;
6134: LD_ADDR_VAR 0 5
6138: PUSH
6139: LD_VAR 0 1
6143: PPUSH
6144: CALL_OW 255
6148: ST_TO_ADDR
// SetSide ( i , GetSide ( vehx [ j ] ) ) ;
6149: LD_VAR 0 1
6153: PPUSH
6154: LD_VAR 0 4
6158: PUSH
6159: LD_VAR 0 2
6163: ARRAY
6164: PPUSH
6165: CALL_OW 255
6169: PPUSH
6170: CALL_OW 235
// ComStop ( i ) ;
6174: LD_VAR 0 1
6178: PPUSH
6179: CALL_OW 141
// DisplayHacks ( vehx [ j ] ) ;
6183: LD_VAR 0 4
6187: PUSH
6188: LD_VAR 0 2
6192: ARRAY
6193: PPUSH
6194: CALL 5625 0 1
// AddVeh ( vehx [ j ] , i , old_side ) ;
6198: LD_VAR 0 4
6202: PUSH
6203: LD_VAR 0 2
6207: ARRAY
6208: PPUSH
6209: LD_VAR 0 1
6213: PPUSH
6214: LD_VAR 0 5
6218: PPUSH
6219: CALL 5330 0 3
// end ; end ;
6223: GO 5959
6225: POP
6226: POP
// end ;
6227: PPOPN 5
6229: END
// on UnitDestroyed ( un ) do var i , j , tmp , t , t2 ;
6230: LD_INT 0
6232: PPUSH
6233: PPUSH
6234: PPUSH
6235: PPUSH
6236: PPUSH
// begin if un in FilterAllUnits ( [ f_weapon , us_hack ] ) then
6237: LD_VAR 0 1
6241: PUSH
6242: LD_INT 34
6244: PUSH
6245: LD_EXP 46
6249: PUSH
6250: EMPTY
6251: LIST
6252: LIST
6253: PPUSH
6254: CALL_OW 69
6258: IN
6259: IFFALSE 6442
// begin for i = 1 to vx_list do
6261: LD_ADDR_VAR 0 2
6265: PUSH
6266: DOUBLE
6267: LD_INT 1
6269: DEC
6270: ST_TO_ADDR
6271: LD_EXP 45
6275: PUSH
6276: FOR_TO
6277: IFFALSE 6440
// if un = vx_list [ i ] [ 1 ] then
6279: LD_VAR 0 1
6283: PUSH
6284: LD_EXP 45
6288: PUSH
6289: LD_VAR 0 2
6293: ARRAY
6294: PUSH
6295: LD_INT 1
6297: ARRAY
6298: EQUAL
6299: IFFALSE 6438
// begin for j = 1 to vx_list [ i ] [ 2 ] do
6301: LD_ADDR_VAR 0 3
6305: PUSH
6306: DOUBLE
6307: LD_INT 1
6309: DEC
6310: ST_TO_ADDR
6311: LD_EXP 45
6315: PUSH
6316: LD_VAR 0 2
6320: ARRAY
6321: PUSH
6322: LD_INT 2
6324: ARRAY
6325: PUSH
6326: FOR_TO
6327: IFFALSE 6414
// begin SetSide ( vx_list [ i ] [ 2 ] [ j ] [ 1 ] , vx_list [ i ] [ 2 ] [ j ] [ 2 ] ) ;
6329: LD_EXP 45
6333: PUSH
6334: LD_VAR 0 2
6338: ARRAY
6339: PUSH
6340: LD_INT 2
6342: ARRAY
6343: PUSH
6344: LD_VAR 0 3
6348: ARRAY
6349: PUSH
6350: LD_INT 1
6352: ARRAY
6353: PPUSH
6354: LD_EXP 45
6358: PUSH
6359: LD_VAR 0 2
6363: ARRAY
6364: PUSH
6365: LD_INT 2
6367: ARRAY
6368: PUSH
6369: LD_VAR 0 3
6373: ARRAY
6374: PUSH
6375: LD_INT 2
6377: ARRAY
6378: PPUSH
6379: CALL_OW 235
// ComStop ( vx_list [ i ] [ 2 ] [ j ] [ 1 ] ) ;
6383: LD_EXP 45
6387: PUSH
6388: LD_VAR 0 2
6392: ARRAY
6393: PUSH
6394: LD_INT 2
6396: ARRAY
6397: PUSH
6398: LD_VAR 0 3
6402: ARRAY
6403: PUSH
6404: LD_INT 1
6406: ARRAY
6407: PPUSH
6408: CALL_OW 141
// end ;
6412: GO 6326
6414: POP
6415: POP
// vx_list := Delete ( vx_list , i ) ;
6416: LD_ADDR_EXP 45
6420: PUSH
6421: LD_EXP 45
6425: PPUSH
6426: LD_VAR 0 2
6430: PPUSH
6431: CALL_OW 3
6435: ST_TO_ADDR
// break ;
6436: GO 6440
// end ;
6438: GO 6276
6440: POP
6441: POP
// end ; if un in FilterAllUnits ( [ f_control , control_computer ] ) and not un in FilterAllUnits ( [ f_weapon , us_hack ] ) then
6442: LD_VAR 0 1
6446: PUSH
6447: LD_INT 33
6449: PUSH
6450: LD_INT 3
6452: PUSH
6453: EMPTY
6454: LIST
6455: LIST
6456: PPUSH
6457: CALL_OW 69
6461: IN
6462: PUSH
6463: LD_VAR 0 1
6467: PUSH
6468: LD_INT 34
6470: PUSH
6471: LD_EXP 46
6475: PUSH
6476: EMPTY
6477: LIST
6478: LIST
6479: PPUSH
6480: CALL_OW 69
6484: IN
6485: NOT
6486: AND
6487: IFFALSE 6721
// begin if isEditor = 1 then
6489: LD_INT 1
6491: PUSH
6492: LD_INT 1
6494: EQUAL
6495: IFFALSE 6507
// display_strings := un ;
6497: LD_ADDR_OWVAR 47
6501: PUSH
6502: LD_VAR 0 1
6506: ST_TO_ADDR
// for i = 1 to vx_list do
6507: LD_ADDR_VAR 0 2
6511: PUSH
6512: DOUBLE
6513: LD_INT 1
6515: DEC
6516: ST_TO_ADDR
6517: LD_EXP 45
6521: PUSH
6522: FOR_TO
6523: IFFALSE 6719
// begin for j = 1 to vx_list [ i ] [ 2 ] do
6525: LD_ADDR_VAR 0 3
6529: PUSH
6530: DOUBLE
6531: LD_INT 1
6533: DEC
6534: ST_TO_ADDR
6535: LD_EXP 45
6539: PUSH
6540: LD_VAR 0 2
6544: ARRAY
6545: PUSH
6546: LD_INT 2
6548: ARRAY
6549: PUSH
6550: FOR_TO
6551: IFFALSE 6715
// if un = vx_list [ i ] [ 2 ] [ j ] [ 1 ] then
6553: LD_VAR 0 1
6557: PUSH
6558: LD_EXP 45
6562: PUSH
6563: LD_VAR 0 2
6567: ARRAY
6568: PUSH
6569: LD_INT 2
6571: ARRAY
6572: PUSH
6573: LD_VAR 0 3
6577: ARRAY
6578: PUSH
6579: LD_INT 1
6581: ARRAY
6582: EQUAL
6583: IFFALSE 6713
// begin tmp := vx_list [ i ] [ 1 ] ;
6585: LD_ADDR_VAR 0 4
6589: PUSH
6590: LD_EXP 45
6594: PUSH
6595: LD_VAR 0 2
6599: ARRAY
6600: PUSH
6601: LD_INT 1
6603: ARRAY
6604: ST_TO_ADDR
// t := Delete ( vx_list [ i ] [ 2 ] , j ) ;
6605: LD_ADDR_VAR 0 5
6609: PUSH
6610: LD_EXP 45
6614: PUSH
6615: LD_VAR 0 2
6619: ARRAY
6620: PUSH
6621: LD_INT 2
6623: ARRAY
6624: PPUSH
6625: LD_VAR 0 3
6629: PPUSH
6630: CALL_OW 3
6634: ST_TO_ADDR
// t2 := Replace ( vx_list [ i ] , 2 , t ) ;
6635: LD_ADDR_VAR 0 6
6639: PUSH
6640: LD_EXP 45
6644: PUSH
6645: LD_VAR 0 2
6649: ARRAY
6650: PPUSH
6651: LD_INT 2
6653: PPUSH
6654: LD_VAR 0 5
6658: PPUSH
6659: CALL_OW 1
6663: ST_TO_ADDR
// vx_list := Replace ( vx_list , i , t2 ) ;
6664: LD_ADDR_EXP 45
6668: PUSH
6669: LD_EXP 45
6673: PPUSH
6674: LD_VAR 0 2
6678: PPUSH
6679: LD_VAR 0 6
6683: PPUSH
6684: CALL_OW 1
6688: ST_TO_ADDR
// ChangeCapture ( tmp , - 1 ) ;
6689: LD_VAR 0 4
6693: PPUSH
6694: LD_INT 1
6696: NEG
6697: PPUSH
6698: CALL 5499 0 2
// DisplayHacks ( tmp ) ;
6702: LD_VAR 0 4
6706: PPUSH
6707: CALL 5625 0 1
// break ;
6711: GO 6715
// end ;
6713: GO 6550
6715: POP
6716: POP
// end ;
6717: GO 6522
6719: POP
6720: POP
// end ; end ;
6721: PPOPN 6
6723: END
// every 0 0$01 do var c , list , un ;
6724: GO 6726
6726: DISABLE
6727: LD_INT 0
6729: PPUSH
6730: PPUSH
6731: PPUSH
// begin list = FilterAllUnits ( [ [ f_weapon , 98 ] ] ) ;
6732: LD_ADDR_VAR 0 2
6736: PUSH
6737: LD_INT 34
6739: PUSH
6740: LD_INT 98
6742: PUSH
6743: EMPTY
6744: LIST
6745: LIST
6746: PUSH
6747: EMPTY
6748: LIST
6749: PPUSH
6750: CALL_OW 69
6754: ST_TO_ADDR
// enable ;
6755: ENABLE
// for un in list do
6756: LD_ADDR_VAR 0 3
6760: PUSH
6761: LD_VAR 0 2
6765: PUSH
6766: FOR_IN
6767: IFFALSE 6830
// begin c = WantsToAttack ( un ) ;
6769: LD_ADDR_VAR 0 1
6773: PUSH
6774: LD_VAR 0 3
6778: PPUSH
6779: CALL_OW 319
6783: ST_TO_ADDR
// if UnitShoot ( c ) = un then
6784: LD_VAR 0 1
6788: PPUSH
6789: CALL_OW 504
6793: PUSH
6794: LD_VAR 0 3
6798: EQUAL
6799: IFFALSE 6828
// ArtContamination ( GetX ( c ) , GetY ( c ) , 1 ) ;
6801: LD_VAR 0 1
6805: PPUSH
6806: CALL_OW 250
6810: PPUSH
6811: LD_VAR 0 1
6815: PPUSH
6816: CALL_OW 251
6820: PPUSH
6821: LD_INT 1
6823: PPUSH
6824: CALL_OW 495
// end ;
6828: GO 6766
6830: POP
6831: POP
// end ;
6832: PPOPN 3
6834: END
